繁体   English   中英

如何在 flutter http 发布请求中发送自定义 header

[英]How to send custom header in flutter http post request

在我的 flutter 项目中有 http package。 我想用自定义 header 发送一个帖子请求。 这是我的代码片段。 它将使用 http 自定义 header 来澄清我的问题。 它总是运行 else 语句意味着响应类型不是 200,它给了我提供的错误令牌无效。 但在邮递员身上,它工作正常

Map data = {
    'user_fullname': _name,
    'user_address': _address,
    'user_mobile': _phone,
  };
  var tokenData = {
    'User_token': token,
    'Content-Type': 'application/x-www-form-urlencoded'
  };

  final response = await http.post(url, body: data, headers: tokenData);
  if (response.statusCode == 200) {
    print(response.body);
  } else {
    print(response.body);
  }

Postman 测试

我猜你正在将无效类型传递给发布请求。 (标题必须是Map<String, String> (我不确定在运行时从tokenData推断出的 dart 是什么),正文可以是动态的,等等)

  final String url = 'YOUR_API_URL';
  final Map<String, String> tokenData = {
   "Content-type": "application/x-www-form-urlencoded",
   "user_token": token
  };
  final Map<String, String> data = { //is _phone a String?
    'user_fullname': _name,
    'user_address': _address,
    'user_mobile': _phone,
  };

  final Response response = await post(url, headers: tokenData, body: data);

  if (response.statusCode == 200) {
    print(response.body);
  } else {
    print(response.body);
  }
}

正文只能是StringList<int>Map<String, String>

https://pub.dev/documentation/http/latest/http/Client/post.html 所述

在您的情况下,必须使用 try... catch 异常。

您可以参考以下内容。

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

而 http 请求是......

  var client = new http.Client();
    try{
       var response = await client.post(
         "Your Url", 
         headers: {"User_token" : token /*, ...etc*/},
         body : {
           'user_fullname': _name,
           'user_address': _address,
           'user_mobile': _phone,
         }
       );
      if(response.statusCode == 200 || response.statusCode == 201){
          //enter your code
      }
    } on Exception catch (err){
       print("Error : $err");
    }

我希望能帮助你。

授权图片

我敢打赌,您的服务器错误地要求User_token header 具有大写U package:http将在发送时将其小写。)

再次尝试您的 postman 请求,但使用小写的user_token 如果您收到错误消息,则确认服务器存在问题。

请注意RFC 中的部分(我的重点):

每个 header 字段由不区分大小写的字段名称后跟冒号(“:”)组成

因此,如果服务器不接受小写 header 字段名称,则服务器有问题。

对此有点晚了,但遇到了同样的问题。 我意识到 flutter HTTP 客户端的标头不区分大小写。 他们会自动将其小写https://github.com/flutter/flutter/issues/16665 一些服务器接收区分大小写的标头。

Postman 发送区分大小写的 header 这就是正确接收 User_token 的原因。

明智的解决方案尝试: https://pub.dev/packages/alt_http

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM