Flutter HttpException:在收到完整标头之前连接已关闭
正如下面的代码所示,我正在试着打电话Flutter HttpException:在收到完整标头之前连接已关闭,flutter,dart,Flutter,Dart,正如下面的代码所示,我正在试着打电话 Map<String, String> header = {"Content-Type": "application/json"}; Map<String, String> body = { "client_id": "xxxx", "client_secret": "XXXX", "password": "password", "username": "username", }; F
Map<String, String> header = {"Content-Type": "application/json"};
Map<String, String> body = {
"client_id": "xxxx",
"client_secret": "XXXX",
"password": "password",
"username": "username",
};
Future<Post> callForFirstToken() async {
final response = await http.post(url, headers: header, body: body);
return response.statusCode == 200
? Post.fromJson(json.decode(response.body))
: throw Exception('Failed to load ...');}
我不完全确定,但我以前在我的案例中看到过这一点。此错误可能与您发布的实际网络呼叫无关。您可以看到的ip地址
127.0.0.1
是调试期间使用的本地计算机的ip地址
这意味着无法使用设备进行调试。您可能需要重新启动并重新连接IDE和/或电话,然后打开任何VPN程序。对我来说,这很有效
您可能还希望将
response.body
设置为Text
小部件,以检查实际的网络呼叫是否成功。我想我也遇到了同样的问题,但我不确定如何解决。
我想这是在标题中添加的:
。标题[“Content Type”]=“application/json”
我已经将标题替换为下面的显示和工作方式
{"HttpHeaders.contentTypeHeader": "application/json"}
这可能是一个错误。
尝试使用
flatter run--启用软件渲染
而不是仅使用run
问题是,连接已关闭,因为未收到来自服务器的相应响应。
这意味着在服务器代码的某个地方,由于异常或繁重的密集工作等原因,它会被卡住。您应该将服务器代码封装在try-catch中,并查看代码被卡住的原因。我的猜测是,您在post请求后忘记将数据发送回客户端,而您的客户端仍在等待该数据。我正在使用emulator。正如你所说,我已经重新启动并关闭了我的窗口机器的VPN。实际上,这不会向application/json添加内容类型。相反,将使用HttpHeaders.contentTypeHeader值创建一个新头,该值为未知头,数据将不会作为JSON处理。
{"HttpHeaders.contentTypeHeader": "application/json"}