HttpException: 在完整的报头接收之前连接已关闭

3

我正在尝试实现如下代码所示的POST调用。

  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 ...');}

但是,我收到了这个错误:

Error connecting to the service protocol: HttpException: Connection closed before full header was received, uri = http://127.0.0.1:60556/sK_cPlYMcGQ=/ws
5个回答

2
我已将标题更改为以下内容,并且已经生效:

我已将标题更改为以下内容,并且已经生效

{"HttpHeaders.contentTypeHeader": "application/json"}

1
实际上,这不会将content-type添加到application/json中。相反,将创建一个新的标头,其值为HttpHeaders.contentTypeHeader,这是未知的标头,并且数据将不会被处理为JSON。 - Srinivas
同意上述评论。您几乎肯定是想要使用 {HttpHeaders.contentTypeHeader: "application/json"} - Chuck Batson

1
我认为我遇到了相同的问题,但我不确定我是如何解决的。 我想是将以下内容添加到头部:..headers["Content-Type"] = "application/json"

0

我不是完全确定,但在我的情况下我曾经见过这种错误。这个错误很可能与你实际的网络调用无关。你发布的IP地址127.0.0.1是你本地机器的IP地址,在调试期间使用。

这意味着设备无法进行调试。您可能需要重新启动和重新连接IDE和/或手机,并关闭任何VPN程序。对我来说,这起作用了。

您还可以将response.body设置为


我正在使用模拟器。正如你所说,我已经重启并关闭了我的Windows机器的VPN。但是仍然没有用。 - Daniel

0

这可能是设置Skia Gr上下文的问题。 尝试使用flutter run --enable-software-rendering而不是仅使用run


0
问题告诉你连接关闭了,因为服务器没有收到适当的响应。这意味着在你的服务器代码中,由于异常或者重度工作等原因,它被卡住了。你应该将服务器代码封装在try-catch中,并查看为什么你的代码被卡住了。我猜想,你可能忘记了在post请求后向客户端发送数据,而你的客户端仍在等待那些数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接