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

如何将POST请求自动重定向为GET请求(Flask/PHP实现求助)

解决POST请求重定向为GET的问题

你的问题出在使用了307状态码——这个状态码的HTTP语义是保留原请求方法,所以浏览器会带着POST方法重定向到目标地址,不符合你的需求。

要实现POST转GET的自动重定向,应该使用303状态码。根据HTTP规范,303明确要求客户端无论原请求是什么方法,都要用GET去访问目标URL,且浏览器会自动完成这个跳转,无需用户干预。

修改后的Flask代码

from flask import Flask, request, redirect

app = Flask(__name__)

@app.route('/redirect', methods=['POST'])
def redire():
    # 用get方法避免表单中没有url字段时抛出KeyError
    target_url = request.form.get('url')
    if not target_url:
        return "Missing 'url' parameter", 400
    # 补充协议头,避免相对路径问题(可选但推荐)
    if not target_url.startswith(('http://', 'https://')):
        target_url = f'https://{target_url}'
    # 使用303状态码重定向
    return redirect(target_url, code=303)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8888)

关键说明

  • 303状态码:是POST转GET重定向的标准方案,所有现代浏览器都支持,完全符合你的需求。
  • 避免硬编码目标URL:你的原代码写死了https://www.example2.com,改成读取表单中的url参数才符合示例请求的逻辑。
  • 参数安全处理:用request.form.get()替代直接取键,防止因缺少参数导致的服务器错误;补充协议头避免相对路径跳转失败。

PHP实现示例

如果需要PHP版本,核心逻辑同样是返回303状态码的重定向:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $target_url = $_POST['url'] ?? '';
    if (empty($target_url)) {
        http_response_code(400);
        echo "Missing 'url' parameter";
        exit;
    }
    if (!str_starts_with($target_url, 'http://') && !str_starts_with($target_url, 'https://')) {
        $target_url = "https://$target_url";
    }
    http_response_code(303);
    header("Location: $target_url");
    exit;
}
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:01:08