You need to enable JavaScript to run this app. 如何使用Dio发送FormData?提交后网站返回错误该如何排查?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Dio发送FormData?提交后网站返回错误该如何排查?

你当前的代码存在多处明显错误,表单编写不符合业务场景要求:

1. 请求类型与Content-Type配置完全错误

你对接的是ASP.NET的异步回发接口,参数提交格式要求为application/x-www-form-urlencoded,而你做了两处错误配置:

  • 错误使用FormData封装参数,FormData仅用于multipart/form-data格式的请求(如传文件场景)
  • 强制设置Content-Type为text/html; charset=utf-8,还额外添加了无效的application: x-www-form-urlencoded请求头,格式完全不符合后端要求

2. 动态参数写死失效

代码里的__VIEWSTATE是ASP.NET的页面状态校验参数,每次访问页面都会动态刷新,你直接写死固定值会被后端校验直接拦截。

3. 空键参数不匹配

你代码里设置的空键是单个空格" ",需要和浏览器实际请求的空键完全一致,如果浏览器里是完全空的字符串"",就需要把键改为空字符串,否则参数会不匹配。

4. 请求头重复冲突

你在拦截器和post请求的Options中重复设置了Content-Type,会导致参数解析异常。


修正后的参考代码:

// 1. 先请求目标页面,提取最新的__VIEWSTATE等动态参数(这里省略爬取逻辑,你需要自行实现提取最新值)
String latestViewState = "你从页面最新爬取到的__VIEWSTATE值";

// 2. 直接用Map封装参数,不要用FormData
var params = {
  "ctl00\$ScriptManager1": "ctl00\$UpdatePanel1",
  "__EVENTTARGET": "ctl00\$cphPage\$productsControl",
  "__EVENTARGUMENT": "",
  "__LASTFOCUS": "",
  "PageLoadedHiddenTxtBox": "Set",
  "Language": "es-MX",
  "CurrentLanguage": "es-MX",
  "Currency": "",
  "__VIEWSTATE": latestViewState,
  "__VIEWSTATEGENERATOR": "C0E71A90",
  "ctl00\$txtSearch": "",
  "ctl00\$cphPage\$productsControl\$TopTools\$cbxSortType": "",
  "ctl00\$cphPage\$productsControl\$TopTools\$cbxPageSize": "-1",
  "ctl00\$taxes\$listCountries": "54",
  "__ASYNCPOST": "true",
  // 这里根据浏览器实际的键调整,是空字符串就写"",是空格就写" "
  "": ""
};

var dio = Dio();
dio.interceptors.add(InterceptorsWrapper(onRequest: (RequestOptions options) async {
  var customHeaders = {
    'Cookie': 'uid=rBQBc2CisZdxWU5XBBmMAg==; ASP.NET_SessionId=tedc4xrih1hk1ykbdzlakuvb; ASPNET_Session=client=BLUR; ShopMSAuth=0102A9A3B88FC919D908FEA90B7DF1D119D908000442004C005500520000012F00FF'
  };
  options.headers.addAll(customHeaders);
  return options;
}));

// 3. 发送请求时指定contentType为form-urlencoded
Response response = await dio.post(
  url,
  data: params,
  options: Options(
    contentType: Headers.formUrlEncodedContentType,
    followRedirects: true
  )
);

print(response.data);

内容的提问来源于stack exchange,提问作者Ernesto Enrique Sanchez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 01:36:01