Flutter发送POST HTTP请求无法正确处理重定向获取跳转地址问题
Flutter POST请求重定向异常问题解决方案
问题根因
302变301、Location字段错误的核心原因有三点:
- 请求方法拼写不符合HTTP标准:代码中写的
"Post"是首字母大写,HTTP规范要求请求方法必须为全大写的POST,大部分服务端路由规则对方法大小写敏感,错误的方法名会触发异常重定向逻辑,返回错误的301状态码。 - 缺少必要的请求头:当前请求没有携带浏览器发起请求时默认带的
User-Agent、Referer等校验字段,服务端的安全规则会识别为非合法浏览器请求,返回错误的重定向地址。 - 提交表单数据未指定编码格式:提交的是x-www-form-urlencoded格式的表单数据,没有显式声明
Content-Type,服务端无法正确解析请求体,触发错误跳转。
修复步骤
- 把请求方法修改为全大写的
POST - 补充必要的请求头,模拟浏览器的请求特征
- 显式声明表单数据的编码格式
修正后的代码示例
http.Request req = http.Request("POST", uri)..followRedirects = false; // 补充必要请求头,可从浏览器的请求详情中复制对应站点的实际请求头值 req.headers.addAll({ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Content-Type': 'application/x-www-form-urlencoded', 'Referer': uri.toString(), 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' }); req.body = 'criterio=3&valor=$codigo&nombre_apellidos=&op=Buscar&form_build_id=$idForm&form_id=tracking_form'; http.Client baseClient = http.Client(); http.StreamedResponse response = await baseClient.send(req); print(response.statusCode); print(response.headers);
内容的提问来源于stack exchange,提问作者Daniel Dario
相关产品推荐
相关产品推荐

