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

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响应后,需要提取返回的.ASPXAUTH Cookie,重新发送请求:

    // 在收到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:56:01