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 错误状态:无法设置内容类型为“0”的请求的正文字段;应用程序/json“; Map headers={'Content-Type':'application/json','authorization':'Basic c3R1ZHlkb3RlOnN0dWR5ZG90ZTEyMw=='; var response=wait post(url.getToken, 标题:标题, 正文:{“授权类型”:“密码”,“用户名”:“*******”,“密码”:“****”,“范围”:“脱机访问”}, );_Http_Dart_Flutter - Fatal编程技术网

Http 错误状态:无法设置内容类型为“0”的请求的正文字段;应用程序/json“; Map headers={'Content-Type':'application/json','authorization':'Basic c3R1ZHlkb3RlOnN0dWR5ZG90ZTEyMw=='; var response=wait post(url.getToken, 标题:标题, 正文:{“授权类型”:“密码”,“用户名”:“*******”,“密码”:“****”,“范围”:“脱机访问”}, );

Http 错误状态:无法设置内容类型为“0”的请求的正文字段;应用程序/json“; Map headers={'Content-Type':'application/json','authorization':'Basic c3R1ZHlkb3RlOnN0dWR5ZG90ZTEyMw=='; var response=wait post(url.getToken, 标题:标题, 正文:{“授权类型”:“密码”,“用户名”:“*******”,“密码”:“****”,“范围”:“脱机访问”}, );,http,dart,flutter,Http,Dart,Flutter,当我执行此操作时,我无法接收数据,并且抛出错误 错误状态:无法设置内容类型为“application/json”的请求的正文字段。您需要将正文包装在jsonEncode中 Map<String,String> headers = {'Content-Type':'application/json','authorization':'Basic c3R1ZHlkb3RlOnN0dWR5ZG90ZTEyMw=='}; var response = await post(Urls.get

当我执行此操作时,我无法接收数据,并且抛出错误


错误状态:无法设置内容类型为“application/json”的请求的正文字段。

您需要将正文包装在
jsonEncode

Map<String,String> headers = {'Content-Type':'application/json','authorization':'Basic c3R1ZHlkb3RlOnN0dWR5ZG90ZTEyMw=='};

var response = await post(Urls.getToken,
        headers: headers,
        body: {"grant_type":"password","username":"******","password":"*****","scope":"offline_access"},
      );

import'package:http/http.dart'作为http;
导入“dart:convert”;
映射头={'Content-Type':'application/json','authorization':'Basic c3R1ZHlkb3RlOnN0dWR5ZG90ZTEyMw='};
final msg=jsonEncode({“授权类型”:“密码”,“用户名”:“*******”,“密码”:“****”,“范围”:“脱机访问”});
var response=wait post(url.getToken,
标题:标题,
主体:味精,
);

在http库中也有类似的问题…针对dio 2.1.0进行了更改,标题的问题消失了

jsonEncode(body)没有做到这一点,因为文档中说:

将具有给定标头和正文的HTTP POST请求发送到给定的 URL,可以是[Uri]或[String]

[body]设置请求的正文。它可以是[字符串],也可以是[列表] 或[地图]。如果是字符串,则使用 [编码]并用作请求的主体。文件的内容类型 请求将默认为“文本/普通”

如果[body]是一个列表,它将用作 请求

如果[body]是一个映射,则使用[encoding]将其编码为表单字段。这个 请求的内容类型将设置为
“应用程序/x-www-form-urlencoded”
;这不能被覆盖。 [编码]默认为[utf8]

要对请求进行更细粒度的控制,请改用[send]

futurepost(url,{Map headers,body,Encoding});
Map header={'Content-Type':'application/json patch+json','accept':'application/json'};
final msg=jsonEncode({“用户名”:“$emailorPhoneN”,“密码”:“$passwrod”});
试一试{
var response=wait http.post(urlstants.loginUrl,headers:header,body:msg,
).超时(持续时间(秒:httpDuration));
var convert=json.decode(response.body);
打印(“*******来自服务器$convert的数据”);
if(convert==null){
返回null;
}否则{
字符串标记=转换['token'];
if(令牌!=null){
SignUpModel SignUpModel=SignUpModel.fromJson(转换);
返回注册模型;
}否则{
//***从API提供程序获取错误消息。。。。。
SignUpModel SignUpModel=SignUpModel.fromJson(转换);
返回注册模型;
}
}

使用
jsonecode
包裹你的身体
对象

Map<String,String> header = {'Content-Type':'application/json-patch+json','accept':'application/json'};
    final msg = jsonEncode({"username":"$emailorPhoneN","password":"$passwrod"});

    try {
      var response = await http.post(UrlConstants.loginUrl, headers: header, body: msg,
      ).timeout(Duration(seconds: httpDuration));
      var convert = json.decode(response.body);
      print('**********Data from server $convert');

      if (convert == null) {
        return null;
      } else {
        String token = convert['token'];

        if (token != null) {
          SignUpModel signUpModel = SignUpModel.fromJson(convert);
          return signUpModel;
        } else {
          //*** GET Error message from the API provider.....
          SignUpModel signUpModel = SignUpModel.fromJson(convert);
          return signUpModel;
        }
      }
为什么
jsonecode

正文:它可以是[String]、[List]或[Map]。它使用编码进行编码并用作请求正文。请求的内容类型默认为“text/plain”

但是由于您将
内容类型设置为
json
,因此必须将json作为主体传递

但是您将
Map
作为主体传递,这显然会抛出一个错误


因此,要解决此问题,您必须通过使用
jsonecode

映射更改或编码为
json
(json字符串)。异常是由不正确设置bodyFields引起的。 见:

bodyFields用于表单编码的数据,而不是JSON。 有关如何发布JSON的示例,请参见:

因此,您试图将映射作为主体传递。在本例中,它将假定您实际上正在执行一个
应用程序/x-www-form-urlencoded
。您需要做的是将
映射编码为字符串,然后执行您正在执行的操作

范例

import 'package:http/http.dart' as http;
import 'dart:convert';

var headers = {
    'Content-Type':'application/json',
    'authorization':'Basic c3R1ZHlkb3RlOnN0dWR5ZG90ZTEyMw=='
};

final body = {
    'username':'foo',
    'password':'pass123'
}

var response = await post(
    Urls.getToken,
    headers: headers,
    body: jsonEncode(body), // use jsonEncode()
);
未来补丁(
字符串url、映射参数、字符串标记)异步{
var responseJson;
试一试{
最终响应=等待http.patch(Uri.parse(url),
正文:JSONECODE(参数),
标题:{
“授权”:令牌,
“内容类型”:“应用程序/json”
}).超时(常数持续时间(秒:60),
onTimeout:()=>抛出TimeoutException(
'连接超时,请重试!');
responseJson=响应;
}论SocketException{
抛出FetchDataException(“您未连接到internet”);
}论时间例外{
打印(“超时”);
抛出TimeoutException(“连接已超时,请重试”);
}
返回响应;
}

try-
body:json.encode({“授权类型”:“密码”、“用户名”:“****”、“密码”:“****”、“范围”:“脱机访问”}),
注意,你也发布了你的
用户名/密码
,即使他们可能是测试用户,这不是一个好的做法…谢谢!起初我没有看到你的答案和问题之间的区别,但现在我明白了关键是用jsonEncode包装地图文字
Map<String,String> header = {'Content-Type':'application/json-patch+json','accept':'application/json'};
    final msg = jsonEncode({"username":"$emailorPhoneN","password":"$passwrod"});

    try {
      var response = await http.post(UrlConstants.loginUrl, headers: header, body: msg,
      ).timeout(Duration(seconds: httpDuration));
      var convert = json.decode(response.body);
      print('**********Data from server $convert');

      if (convert == null) {
        return null;
      } else {
        String token = convert['token'];

        if (token != null) {
          SignUpModel signUpModel = SignUpModel.fromJson(convert);
          return signUpModel;
        } else {
          //*** GET Error message from the API provider.....
          SignUpModel signUpModel = SignUpModel.fromJson(convert);
          return signUpModel;
        }
      }
import 'package:http/http.dart' as http;
import 'dart:convert';

var headers = {
    'Content-Type':'application/json',
    'authorization':'Basic c3R1ZHlkb3RlOnN0dWR5ZG90ZTEyMw=='
};

final body = {
    'username':'foo',
    'password':'pass123'
}

var response = await post(
    Urls.getToken,
    headers: headers,
    body: jsonEncode(body), // use jsonEncode()
);
  Future<http.Response> patchAPICall(
      String url, Map param, String token) async {
    var responseJson;
    try {
      final response = await http.patch(Uri.parse(url),
          body: jsonEncode(param),
          headers: {
            "Authorization": token,
            "Content-Type": "application/json"
          }).timeout(const Duration(seconds: 60),
          onTimeout: () => throw TimeoutException(
              'The connection has timed out, Please try again!'));
      responseJson = response;
    } on SocketException {
      throw FetchDataException("You are not connected to internet");
    } on TimeoutException {
      print('Time out');
      throw TimeoutException("The connection has timed out, Please try again");
    }
    return responseJson;
  }