如何执行重定向浏览器并在PHP中发送HTTP POST请求?如果您愿意,可以使用HTTP POST请求的header("Location: file.php?foo=bar")
。PHP中的HTTP POST请求
回答
你不能要求一个网页 - HTTP不允许这样 - 如果你想通过重定向来传递参数必须将它们嵌入作为GET变量的URL。
C.
这是不对的。您无法使用HTTP/3xx重定向将GET转换为POST,但可以使用HTTP/307将POST重定向至POST。 – EricLaw 2010-01-07 15:34:50
否 - 来自rfc2616: “只有当第二个请求中使用的方法是GET或HEAD时,用户代理才可以执行所需的操作,而无需与用户交互。”在实践中,没有我知道的浏览器为此实现隐含的引出条款(即询问用户)。 C. – symcbean 2010-01-08 10:14:16
如果Web服务器收到一个GET请求,并且它需要对另一个Web服务器执行一个POST请求,作为respose的一部分,它必须自己执行POST。 (对于PHP,您可能应该使用CURL。)HTTP不提供让用户代理(Web浏览器)为服务器执行此操作的方法。被警告GET请求被允许随意重复(因为GET根据定义是幂等的),并且Web服务器可能不应该在每次收到GET请求时盲目地重复POST到另一个服务器。 – 2011-10-20 07:33:00
我不相信你可以通过在请求中重定向来让浏览器POST数据。你仅限于GET。如果您希望浏览器发布您需要构建<form>
并提交的内容。 (或者使用AJAX请求。)
PHP没有这样的东西。为了完成你的例子,你可以简单地说$_GET['foo'] = 'bar'; include("file.php")
,但是给予浏览器的URL不会被改变。
这并不重定向浏览器,但它可以执行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>
谢谢,虽然我向你保证简单的形式浮现在脑海。它需要完全服务器端。显然这是不可能的。 – 2010-01-07 13:24:10
我不知道为什么你不会有什么需要这一点,但它是不可能在任何服务器端语言。
你可以使用JavaScript库如jQuery使用POST请求
这个问题在这里How do you POST to a page using the PHP header() function?问。
有人评论说,如果你已经有了数据,你为什么需要将它发布到任何地方,为什么你不能仅仅处理该页面中的数据呢?
您可能想要发布已有数据的一个原因是外部网站。例如,您可能希望将数据直接发布到PayPal,而不是让用户提交额外的表单。 – Chaim 2010-01-07 20:13:36
如果您需要在重定向时传输数据而不显示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>
- 1. eBay PHP HTTP POST请求?
- 2. HTTP POST请求
- 3. 更改HTTP POST请求HTTPS POST请求:
- 4. iOS中的HTTP“POST”请求
- 5. Silverlight中的HTTP POST请求
- 6. 用于HTTP POST请求的PHP脚本
- 7. 通过代理的HTTP POST请求php
- 8. 在PHP缓慢的HTTP POST请求
- 9. HTTP POST请求AngularJS
- 10. Angular2 HTTP POST请求
- 11. ASMX HTTP POST请求
- 12. 发送HTTP POST请求与PHP
- 13. 发送HTTP POST请求使用PHP
- 14. Http请求和PHP POST/GET VB.Net
- 15. HTTP POST请求的Android
- 16. 伪造的HTTP POST请求
- 17. 与Erlang的HTTP POST请求
- 18. Android上的HTTP POST请求
- 19. 阻止HTTP POST请求
- 20. Objective-C HTTP POST请求
- 21. Angular2 - HTTP POST请求参数
- 22. angularjs HTTP POST请求坏400
- 23. http post请求帮助
- 24. Http请求POST vs GET
- 25. HTTP POST请求失败
- 26. HTTP POST请求卷曲
- 27. 处理http post请求
- 28. Http POST请求URL包含'['
- 29. 发送HTTP POST请求
- 30. Visual Basic 2010 HTTP POST请求
我不明白为什么你必须做到这一点。事实上,一定有其他更优雅的方式来解决你的问题。 – mauris 2010-01-07 13:09:18