2010-01-07 171 views
4

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

+0

我不明白为什么你必须做到这一点。事实上,一定有其他更优雅的方式来解决你的问题。 – mauris 2010-01-07 13:09:18

回答

5

你不能要求一个网页 - HTTP不允许这样 - 如果你想通过重定向来传递参数必须将它们嵌入作为GET变量的URL。

C.

+1

这是不对的。您无法使用HTTP/3xx重定向将GET转换为POST,但可以使用HTTP/307将POST重定向至POST。 – EricLaw 2010-01-07 15:34:50

+0

否 - 来自rfc2616: “只有当第二个请求中使用的方法是GET或HEAD时,用户代理才可以执行所需的操作,而无需与用户交互。”在实践中,没有我知道的浏览器为此实现隐含的引出条款(即询问用户)。 C. – symcbean 2010-01-08 10:14:16

+0

如果Web服务器收到一个GET请求,并且它需要对另一个Web服务器执行一个POST请求,作为respose的一部分,它必须自己执行POST。 (对于PHP,您可能应该使用CURL。)HTTP不提供让用户代理(Web浏览器)为服务器执行此操作的方法。被警告GET请求被允许随意重复(因为GET根据定义是幂等的),并且Web服务器可能不应该在每次收到GET请求时盲目地重复POST到另一个服务器。 – 2011-10-20 07:33:00

1

我不相信你可以通过在请求中重定向来让浏览器POST数据。你仅限于GET。如果您希望浏览器发布您需要构建<form>并提交的内容。 (或者使用AJAX请求。)

3

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

Curl Manual

Curl POST Example

PHP POST Without Curl

将浏览器重定向我建议使用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> 
+0

谢谢,虽然我向你保证简单的形式浮现在脑海。它需要完全服务器端。显然这是不可能的。 – 2010-01-07 13:24:10

2

我不知道为什么你不会有什么需要这一点,但它是不可能在任何服务器端语言。

你可以使用JavaScript库如jQuery使用POST请求

1

这个问题在这里How do you POST to a page using the PHP header() function?问。

有人评论说,如果你已经有了数据,你为什么需要将它发布到任何地方,为什么你不能仅仅处理该页面中的数据呢?

+0

您可能想要发布已有数据的一个原因是外部网站。例如,您可能希望将数据直接发布到PayPal,而不是让用户提交额外的表单。 – Chaim 2010-01-07 20:13:36

1

如果您需要在重定向时传输数据而不显示URL中的数据,则可以使用$ _SESSION,首先将数据存储到会话中,然后重定向页面,重定向从会话获取数据并销毁会话数据后。

好的,如果您需要将数据传输到其他网站而不显示在网址中,您必须使用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>