You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Axios发送带FormData的GET请求报400错误如何解决

问题原因
  • 标准HTTP实现中,绝大多数HTTP客户端(包括浏览器端XHR/fetch、高版本Axios)默认会直接丢弃GET请求的请求体(body),你配置的data: formData根本没有被发送到后端,Flask接收不到预期的表单参数就会返回400错误。
  • Postman自动生成的代码存在兼容缺陷:Postman自身对cURL的--form+GET的场景做了私有兼容,没有遵循通用HTTP客户端的默认行为,直接复制生成的Axios代码无法在浏览器/普通Node环境运行。
  • 原代码本身存在bug:"User-Agent": client中的client变量未定义,会直接触发引用错误;浏览器环境下原生FormData不存在getHeaders()方法,手动导入form-data包反而会导致请求头的multipart边界值错误,后端无法解析表单。
解决方案

优先和后端确认参数传递规则,90%以上的Flask服务不会解析GET请求的请求体,推荐直接把参数拼到URL查询参数中,全环境兼容:

import axios from "axios";

const response = await axios.get(URL, {
  headers: {
    "User-Agent": "client"
  },
  params: {
    client: "client",
    endpoint: "endpoint"
  }
});
const { data } = response;

如果后端明确要求GET请求必须携带multipart/form-data格式的请求体(仅Node.js环境可实现,浏览器端受安全规范限制技术上不支持),使用如下写法:

import axios from "axios";
import FormData from "form-data";

const formData = new FormData();
formData.append("client", "client");
formData.append("endpoint", "endpoint");

const response = await axios.get(URL, {
  headers: {
    "User-Agent": "client",
    ...formData.getHeaders()
  },
  data: formData,
  transformRequest: [(data) => data], // 强制Axios保留GET请求的请求体
  maxBodyLength: Infinity
});
const { data } = response;

注意:不要尝试在浏览器前端页面代码中实现GET+FormData的逻辑,该行为不符合W3C规范,不同浏览器表现不一致,会出现偶发请求失败的问题。

内容的提问来源于stack exchange,提问作者Omar Dulaimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:39:24