You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Dart HttpClient发送Post请求后无法获取响应,该如何解决?

解决Dart HttpClient POST请求无法获取响应的问题

首先咱们先拆解你的代码里的两个核心问题,再一步步修正来拿到正确的响应:

1. 请求格式不匹配

你把请求头设为Content-Type: application/json,但实际发送的是param=编码后的json这种表单格式的内容,这会让服务器无法正确解析你的请求,自然也返回不了预期响应。JSONPlaceholder的/posts接口期望直接接收纯JSON格式的请求体,不需要包裹在表单参数里。

2. 未读取响应内容

你返回的HttpClientResponse只是响应的基础对象,还需要主动读取它的流内容才能拿到实际的响应数据。

修正后的完整代码

import 'dart:convert';
import 'dart:io';

Future<Map<String, dynamic>> submit() async { 
  print('start'); 
  Map<String, dynamic> data = { 'title' : 'My first post' }; 
  String jsonString = json.encode(data); 
  List<int> bodyBytes = utf8.encode(jsonString); 

  HttpClient httpClient = HttpClient();
  try {
    HttpClientRequest request = await httpClient.postUrl(Uri.parse('https://jsonplaceholder.typicode.com/posts')); 
    // 保持请求头和发送内容格式一致
    request.headers.set('Content-Type', 'application/json'); 
    request.headers.set('Content-Length', bodyBytes.length.toString()); 
    request.add(bodyBytes); 

    HttpClientResponse response = await request.close();
    print('响应状态码: ${response.statusCode}');

    // 将响应流转换为字符串
    String responseBody = await response.transform(utf8.decoder).join();
    print('响应内容: $responseBody');

    // 解析为JSON对象返回
    return json.decode(responseBody);
  } catch (e) {
    print('请求过程出错: $e');
    rethrow;
  } finally {
    // 务必关闭HttpClient,避免资源泄漏
    httpClient.close();
  }
}

关键改动说明

  • 对齐请求格式:直接发送JSON字符串的字节,不再用表单参数包裹,和Content-Type声明的格式保持一致
  • 读取响应流:通过response.transform(utf8.decoder).join()把响应的字节流转换成可读的字符串,再解析为JSON对象
  • 资源管理:用try/finally确保HttpClient被关闭,防止长期运行导致的资源泄漏
  • 错误捕获:添加异常捕获,方便快速排查请求过程中出现的问题

调用示例

你可以这样调用方法并获取最终结果:

void main() async {
  try {
    Map<String, dynamic> result = await submit();
    print('最终返回结果: $result');
  } catch (e) {
    print('调用出错: $e');
  }
}

这样就能正常获取到服务器返回的响应数据啦~

内容的提问来源于stack exchange,提问作者Patrick Obafemi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:59:09