Flutter/Dart http POST 重定向通过 GET 发送正文

Posted

技术标签:

【中文标题】Flutter/Dart http POST 重定向通过 GET 发送正文【英文标题】:Flutter/Dart http POST redirect send body via GET 【发布时间】:2021-06-05 16:01:10 【问题描述】:

我正在尝试将POST 数据发送到 Google 表格网络应用程序。

当我 POSTdata 到端点时,我得到状态 302。如果我随后将 POST 数据发送到新位置,我会得到状态 405。

当我使用 Postman 时它可以工作,但我无法让它在 Flutter 中工作。

Postman 收到 302,然后以我的 JSON 有效负载作为正文发送一个 GET 请求。这似乎违反了GET 规范,但它确实有效。

我尝试了颤振的 HTTP 包和 DIO,都不允许我通过 GET 发送正文。我尝试了使用和不使用 followRedirects 的 DIO。

我如何通过GET 在颤振中发送正文?

【问题讨论】:

【参考方案1】:

使用 dio 配置您的 Options 小部件,如下所示,以避免对第一个请求进行重定向:

Options(
        followRedirects: false,
        validateStatus: (status) 
          return status < 500;
        ),

GET 不打算发送数据,请参阅https://***.com/a/60312720/10286880。

如果您想通过 POST 发送它们,您可以执行以下操作:

final res = await dio.post(
    '[YOUR ADRESS]',
    data: json.encode([YOUR BODY AS MAP])
  );

【讨论】:

不幸的是,使用 POST 不起作用,我必须使用 GET。我不知道为什么 Google 会以这种方式实施它,因为它与您所说的违反规范一样。【参考方案2】:

你可以改用 dio 请求

await dio.request(
  "/test",
  data: "id": 12, "name": "xx",
  options: Options(method: "GET"),
);

【讨论】:

以上是关于Flutter/Dart http POST 重定向通过 GET 发送正文的主要内容,如果未能解决你的问题,请参考以下文章

Http.post不接受flutter / dart中的内容类型application / query + json

HTTP 请求未在响应中执行 - Flutter/Dart

如何使用 HTTP 请求(Flutter/Dart)检查 Internet 连接?

调试时更改设置 - Flutter/Dart

[文末赠书]面试被问到Flutter/Dart的HashMap你会吗?

收到推送通知但未显示(Flutter / Dart)