PHP中的HTTP POST请求

4

如何在PHP中重定向浏览器并发送HTTP POST请求?如果您愿意,可以使用header("Location: file.php?foo=bar")来实现HTTP POST请求。


我不明白为什么你一定要这样做。实际上,解决你的问题肯定有更加优雅的方式。 - mauris
7个回答

5

您无法这样做 - HTTP不允许此操作 - 如果您想通过重定向传递参数,它们必须作为GET变量嵌入到URL中。

C.


1
那有点正确。你无法使用HTTP/3xx重定向将GET转换为POST,但是你可以使用HTTP/307将POST重定向到另一个POST。 - EricLaw
不需要RFC2616中的No-: “仅当第二个请求中使用的方法为GET或HEAD时,用户代理才可以在不与用户交互的情况下执行所需的操作。” 实际上,我了解的浏览器都没有实现这个暗示的get-out条款(即询问用户)。 - symcbean
如果Web服务器收到GET请求并且需要作为响应处理的一部分向另一个Web服务器发送POST请求,则必须自行执行POST(对于PHP,您可能应该使用CURL)。HTTP不提供一种方法来要求用户代理(Web浏览器)为服务器执行此操作。请注意,GET请求可以随意重复(因为按定义GET是幂等的),Web服务器可能不应该每次收到GET请求时都盲目地重复向另一个服务器发送POST请求。 - Mikko Rantalainen

3

这并不会重定向浏览器,但可以执行POST请求。

Curl 手册

Curl POST 示例

PHP 不使用 Curl 进行 POST 请求

要重定向浏览器,建议使用 JavaScript。

一个执行 POST 并重定向的示例表单

 <FORM action="http://somesite.com/prog/adduser" method="post">
    <P>
    <LABEL for="firstname">First name: </LABEL>
              <INPUT type="text" id="firstname"><BR>
    <LABEL for="lastname">Last name: </LABEL>
              <INPUT type="text" id="lastname"><BR>
    <LABEL for="email">email: </LABEL>
              <INPUT type="text" id="email"><BR>
    <INPUT type="radio" name="sex" value="Male"> Male<BR>
    <INPUT type="radio" name="sex" value="Female"> Female<BR>
    <INPUT type="submit" value="Send"> <INPUT type="reset">
    </P>
 </FORM>

谢谢你,虽然我向你保证我想到了简单的表单。它需要完全在服务器端完成。显然这是不可能的。 - Johannes Gorset

2

我不确定你为什么需要这个,但是在任何服务器端语言中都不可能实现。

你可以使用javascript库,比如jQuery来使用post请求获取一个页面。


1
如果您需要在重定向时传输数据,而不显示在URL中,可以使用$_SESSION。首先将数据存储到会话中,然后重定向页面,在重定向后从会话中获取数据并销毁会话数据。
好的,如果您需要将数据传输到其他网站而不显示在URL中,则必须使用JavaScript。例如将数据传输到PayPal。只需创建一个表单并编写JavaScript代码以在页面加载时自动提交表单。以下是示例代码:
<form name="myform" action="handle-data.php">
Search: <input type='text' name='query' />
<a href="javascript: submitform()">Search</a>
</form>
<script type="text/javascript">
function submitform()
{
  document.myform.submit();
}
</script> 

1

我不相信你可以通过在请求过程中重定向浏览器来POST数据。你只能使用GET。如果你想让浏览器POST一些东西,你需要构建一个<form>并提交它。(或者使用AJAX请求。)


1

1

这个问题在这里被问到:如何使用PHP header()函数提交页面?

有人评论说,如果您已经拥有数据,为什么需要将其发布到其他地方?为什么不能在该页面上直接处理数据呢?


您可能希望将已有数据发布到外部网站的原因之一是为了方便。例如,您可能希望直接将数据发布到PayPal,而不是让用户提交额外的表单。 - Chaim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接