Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 颤振:内容类型必须是application/json_Http_Dart_Flutter - Fatal编程技术网

Http 颤振:内容类型必须是application/json

Http 颤振:内容类型必须是application/json,http,dart,flutter,Http,Dart,Flutter,我遇到http post请求问题。我得到的响应是“内容类型必须是application/json”,但是我正在设置标题以指定内容的类型是json const Map<String, String> header = { 'Content-type': 'application/json', 'Accept': 'application/json', }; static void init() async { var body = { "u

我遇到http post请求问题。我得到的响应是“内容类型必须是application/json”,但是我正在设置标题以指定内容的类型是json

const Map<String, String> header = {
  'Content-type': 'application/json',
  'Accept': 'application/json',
};

static void init() async {
    var body =
      {
        "username": username, // String username defined above
        "password": password, // String password defined above
      };

    var response = await http.post(url, body: json.encode(body), headers: header);
    print(response.body);
}
如上所述,我希望它能够工作并返回一个有效的json响应,但是我收到一个错误代码400,消息是“Content type必须是application/json”。我不太确定如何解决这个问题,我曾多次使用这种方法来传递http.Post请求,而且一直都很有效。

1st。如果您使用的是http.post,则无需再次指定application/json头。能否尝试删除标题:标题。 2do。请仔细检查正文是否为json格式。 使用http.post的简单示例

请注意,我没有发送http头。
希望能有所帮助。

对于所有想知道的人来说,Richard Heap在上面的评论是正确的,他找到了解决这个问题的基础HttpClient。我不知道如何相信他的答案,如果有人知道,请建议,这样我就可以这样做

下面是我用来让代码用于文档目的的代码片段

static void init() async {
    HttpClient httpClient = new HttpClient();
    HttpClientRequest request = await httpClient.postUrl(Uri.parse(url));
    request.headers.set('Content-type', 'application/json');
    request.add(utf8.encode(json.encode(rawBody)));
    HttpClientResponse response = await request.close();
    String reply = await response.transform(utf8.decoder).join();
    var jsonReply = json.decode(reply);
    httpClient.close();
}

这给了我所需要的回应,非常感谢Richard,作为一个新用户,我永远不会明白这一点。

试试capital T.Content-Type@Spectarion这似乎没有解决问题。你的破折号对吗?以前遇到了一些问题。值得注意的是,包:http小写在发送它们之前,所有的头名称。虽然这是完全合法的,但它会混淆一些服务器,并导致其他用户出现类似问题。请尝试较低级别的HttpClient来证明这是否是问题所在。如果是,您需要让服务器修复它。没问题-不客气。很高兴您能够解决几乎肯定是服务器问题的问题。请注意,您使用映射作为主体的方式将导致以x-www-form-urlencoded的形式发送主体,这不是OP想要的
static void init() async {
    HttpClient httpClient = new HttpClient();
    HttpClientRequest request = await httpClient.postUrl(Uri.parse(url));
    request.headers.set('Content-type', 'application/json');
    request.add(utf8.encode(json.encode(rawBody)));
    HttpClientResponse response = await request.close();
    String reply = await response.transform(utf8.decoder).join();
    var jsonReply = json.decode(reply);
    httpClient.close();
}