2010-01-07 173 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>