如何在 Flutter/Dart 中使用 url 编码的标头和正文发出 HTTP POST 请求

Posted

技术标签:

【中文标题】如何在 Flutter/Dart 中使用 url 编码的标头和正文发出 HTTP POST 请求【英文标题】:How to make HTTP POST request with url encoded header and body in Flutter/Dart 【发布时间】:2022-01-05 07:48:57 【问题描述】:

我一直在尝试向需要对请求标头和正文进行编码的端点发出发布请求,但是到目前为止,我得到的响应是 400 错误。到目前为止,我获得工作请求的唯一方法是在 VSCode 中使用 curl 请求和 Thunder 客户端。以下是我的请求正文。任何形式的帮助将不胜感激。

使用flutter http包:

Response response = await post(
      Uri.parse(URL), 
      headers: 
      'Authorization': 'Basic $base64Encode(utf8.encode('$ID:$SECRET'))',
      'Content-Type': 'application/x-www-form-urlencoded',
      , 
      encoding: Encoding.getByName('utf-8'),
      body: 
      'grant_type': 'refresh_token',
      'refresh_token': refreshToken,
      'redirect_uri':
          redirectUri,
      
    );

错误:

使用 Flutter Dio 包:

Dio.Dio dio = Dio.Dio();
    Dio.Response response = await dio.post(
        URL,
        data: 
          'grant_type': 'refresh_token',
          'refresh_token': refreshToken,
          'redirect_uri':
              redirectUri,
        ,
        options:
            Dio.Options(contentType: Dio.Headers.formUrlEncodedContentType, headers: <String, String>'Authorization': 'Basic $base64Encode(utf8.encode('$ID:$SECRET'))'));

错误:

【问题讨论】:

您是否尝试过简单地提供 body: 'grant_type=refresh_token&amp;refresh_token=$refreshToken&amp;redirect_uri=$redirectUri' ? Afaik 这就是 x-www-form-urlencoded 所期望的 仍然收到相同的 400 错误消息 【参考方案1】:

当您从服务器 400 得到响应时,api 正在访问服务器。尝试从后端调试以详细了解确切的问题。

【讨论】:

以上是关于如何在 Flutter/Dart 中使用 url 编码的标头和正文发出 HTTP POST 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter Dart 中迭代 JSON Map 并检索键值结果?

Flutter/Dart Uri 没有在 URL 中转义冒号“:”

查询时如何在 Flutter (Dart) 中使用变量 Cloud Firestore

如何使用 Flutter/Dart 检查 Firebase 数据库中是不是存在节点

(Flutter/Dart) 如何修复使用 [ ] 显示列表中的数字

如何使用 if 语句在“flutter / dart”中发送 https 发布请求