Flutter发送POST请求遭遇307临时重定向错误求助
解决POST请求返回307临时重定向(地址与请求URL一致)的思路
核心问题分析
307临时重定向且地址与原请求一致,通常是服务器要求客户端重新携带特定Cookie或修正请求参数后重试。结合响应头里的.ASPXAUTH Cookie,大概率是会话验证相关要求,再加上请求头的Content-Type不匹配,也可能触发该异常。
具体解决步骤
修正Content-Type请求头
当前代码中Content-Type设为text/plain,但实际发送的是JSON序列化后的body,服务器无法正确解析会触发异常处理逻辑。将headers里的Content-Type改为application/json:final headers = { 'Authorization': 'Basic $credentials', 'Content-Type': 'application/json', // 修正此处 'Cache-Control': 'no-cache', };手动处理307重定向并携带Cookie
Dart的http包默认不会自动跟随307重定向(需保留原POST方法和body),收到307响应后,需要提取返回的.ASPXAUTHCookie,重新发送请求:// 在收到307响应的分支里添加重定向逻辑 else if (response.statusCode == 307) { print('${response.statusCode}\n${response.reasonPhrase}\n${response.headers}\nBody: ${response.body}'); // 提取set-cookie头中的.ASPXAUTH值 String? cookie = response.headers['set-cookie']; if (cookie != null) { // 重新构造headers,添加Cookie字段 Map<String, String> newHeaders = Map.from(headers); newHeaders['Cookie'] = cookie.split(';')[0]; // 只取.ASPXAUTH部分 // 重新发送POST请求 http.Response redirectResponse = await http.post( uri, headers: newHeaders, body: jsonEncode(body), ); // 处理重定向后的响应 if (redirectResponse.statusCode == 200) { print('Redirect Response: ${redirectResponse.body}'); } else { print('Redirect failed: ${redirectResponse.statusCode}'); } } }验证URL路径的大小写一致性
服务器是Microsoft IIS,对URL路径大小写敏感,确认请求的https://robotalker.com/REST/api/MultiJob是否与官方文档提供的路径完全一致(比如是否应为小写的rest/api/multijob),路径不匹配也可能触发无意义的重定向。
内容的提问来源于stack exchange,提问作者Chris Rauch
相关产品推荐
相关产品推荐

