如何在Flutter / Dart http Request对象上设置标头?

时间:2019-09-21 15:14:17

标签: http flutter dart

我需要一种将dart http请求对象的标头设置为application / JSON的方法。

我想构建一个Request对象以发送到我的后端API。我将主体设置为我的JSON对象,但是当它发送时,它会将标头默认为text / html而不是application / json。

我尝试使用内置方法

http.post(url,dynamic body);

但不幸的是,此方法将正文放在URL的参数中,而我需要在请求的实际正文中。

因此,我改为构建了一个http Request对象,并手动设置了URL和正文,但正如我所说的,它将标头设置为text / html。 我已经阅读了https://pub.dev/documentation/http/latest/http/Request-class.html的文档,但不幸的是,我还没有找到设置标题的方法。

postRequest(uri) async {

    Uri url = Uri.tryParse("https://ptsv2.com/t/umt4a-1569012506/post");

    http.Request request = new http.Request("post", url);

    request.body = '{mediaItemID: 04b568fa, uri: https://www.google.com}';

    var letsGo = await request.send();

    print(letsGo.statusCode);
}


非常感谢您提供任何可能的解决方案!

Ps。这是我对Stack Overflow的第一个询问,因此我对发布中的任何错误表示歉意。

2 个答案:

答案 0 :(得分:1)

for the post or get any request you can Add Header like this - 

 var permAddUrl =  'your requested url';

 var bodyParameters =  {
      'Email': email,
      'MobileNo': mobileNumber,
    };

   await http.post(
     requesturl,
      headers: {  'Content-Type': 'application/x-www-form-urlencoded',
        "Authorization":"$token",
},

  body: bodyParameters,).then((response) {
      var data = json.encode(response.body);
      print(data);
      setState(() {
        if(response.statusCode == 200){
          //var statesList = data['data'];
          UtilAction.showSnackBar(context, " Details Submitted Successfully");

        }
      });
    });

答案 1 :(得分:0)

解决了!

postRequest(uri) async {

    Uri url = Uri.tryParse("https://ptsv2.com/t/umt4a-1569012506/post");

    http.Request request = new http.Request("post", url);

    request.headers.clear();
    request.headers.addAll({"content-type":"application/json; charset=utf-8"});
    request.body = '{mediaItemID: 04b568fa, uri: https://www.google.com}';

    var letsGo = await request.send();

    print(letsGo.statusCode);
}

我在请求对象默认设置编码方面遇到了一些问题。 通过手动指定utf-8,我正在联系的服务器会接受它。