Flutter中的HTTP POST获取Cookie

时间:2019-11-23 13:53:45

标签: http cookies flutter http-post postman

我想用Flutter进行HTTP POST。我想登录一个网站并获取Cookie。使用显示的HTTP帖子,我无法登录。我没有得到Cookie。我尝试使用Software Postman进行相同的HTTP POST,并且可以正常工作。有人知道HTTP POST之间的区别在哪里吗?

使用Postman进行HTTP POST:

$ docker info|grep -i runtime
 Runtimes: nvidia runc
 Default Runtime: runc

颤振代码:

POST /fuer-studierende/intranet/ HTTP/1.1
Host: www.phwt.de
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
User-Agent: PostmanRuntime/7.19.0
Accept: */*
Cache-Control: no-cache
Postman-Token: c1daecce-cc06-432a-ac5d-888d90b345c2,7eb5d96f-e42c-4dee-932e-c4c30d12d499
Host: www.phwt.de
Accept-Encoding: gzip, deflate
Content-Length: 734
Connection: keep-alive
cache-control: no-cache


Content-Disposition: form-data; name="user"

test
------WebKitFormBoundary7MA4YWxkTrZu0gW--,
Content-Disposition: form-data; name="user"

test
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="pass"

test
------WebKitFormBoundary7MA4YWxkTrZu0gW--,
Content-Disposition: form-data; name="user"

test
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="pass"

test
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="logintype"

login
------WebKitFormBoundary7MA4YWxkTrZu0gW--,
Content-Disposition: form-data; name="user"

test
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="pass"

test
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="logintype"

login
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="pid"

128
------WebKitFormBoundary7MA4YWxkTrZu0gW--,
Content-Disposition: form-data; name="user"

test
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="pass"

test
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="logintype"

login
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="pid"

128
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="submit"

Anmelden
------WebKitFormBoundary7MA4YWxkTrZu0gW--,
Content-Disposition: form-data; name="user"

test
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="pass"

test
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="logintype"

login
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="pid"

128
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="submit"

Anmelden
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="tx_felogin_pi1[noredirect]"

0
------WebKitFormBoundary7MA4YWxkTrZu0gW--  

1 个答案:

答案 0 :(得分:0)

我建议您将dio及其插件dio_cookie_manager使用。

向项目添加依赖项:

dependencies:
    dio: 3.x #latest version
    dio_cookie_manager: 1.0.x  #latest version

然后在您的代码中使用它:

import 'package:dio/dio.dart';
import 'package:dio_cookie_manager/dio_cookie_manager.dart';
import 'package:cookie_jar/cookie_jar.dart';
void login() async {
  try {
    var dio =  Dio();
    var cookieJar=CookieJar();
    dio.interceptors.add(CookieManager(cookieJar));
    await dio.post("your URL", data: [your data object]);

    // Print cookies
    print(cookieJar.loadForRequest(Uri.parse("your URL")));
  } catch (e) {
    print(e);
  }
}

使用PersistCookieJar()而非CookieJar将Cookie保存在文件中(而不是RAM中)。 查看文档以了解详细信息。