2010-03-12 76 views
1

我有一個只接受POST請求的託管腳本。 例如,some.hosted/script.phpphp將GET請求轉換爲POST請求

我怎樣才能設置另一個簡單的PHP,可以接受GET請求,然後將其POST到託管腳本。 這樣我就可以建立一個這樣的鏈接:other.site/post2hostedscript.php?postthis=data 然後POST postthis = data到託管腳本。

TNX

編輯: post2hostedscript.php不給任何結果。 結果將直接轉到some.hosted/script.php ,就好像用戶直接在託管腳本上進行POST一樣。

+0

這個腳本應該在GET請求之後返回什麼? POST後的另一個腳本的響應? – 2010-03-12 12:00:43

+0

爲什麼簡單的array_merge($ _ POST,$ _GET)不起作用?然後你可以調用我想要的任何腳本。不知道是否有任何迫在眉睫的問題。 – pinaki 2010-03-12 12:09:33

+0

不是一個好主意。GET和POST的意思是分開的,以便用戶代理知道他們在按照鏈接或發佈表單時所做的事情,即遵循鏈接不應有副作用並多次發出GET請求應該與發佈一次具有相同的效果。 – 2010-03-12 12:21:51

回答

1

看看「捲曲」功能,它們提供您需要的一切。

3

post2hostedscript.php則要:

  • 取所有收到的參數,如GET
  • 構建一個POST查詢
  • 發送
  • 和可能,返回POST請求的結果。


這大概可以使用curl來完成,例如;這樣的事情應該讓你開始:

$queryString = $_SERVER['QUERY_STRING']; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.othersite.com/post2hostedscript.php"); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $queryString); 
curl_exec($ch); 
curl_close($ch); 

有關可捲曲使用的選項的列表,你可以看看的curl_setopt頁面。


在這裏,你將不得不使用,至少:

  • CURLOPT_POST:只要你想發送POST請求,而不是GET
  • CURLOPT_RETURNTRANSFER:這取決於你是否要curl_exec返回請求的結果,或僅輸出它。
  • CURLOPT_POSTFIELDS:將發佈的數據 - 即您在傳入請求的查詢字符串中所擁有的數據。

並注意從POST請求的響應可能包括一些有趣的HTTP頭 - 如果需要的話,你就必須來接他們(見CURLOPT_HEADER選項),並重新發送有趣的你自己的回覆(見header函數)

+1

注意雖然GET數據的大小不應超過1024字節,並且文件上傳是不可能的。 – 2010-03-12 12:07:18

+0

@Pekka:關於文件上傳的權限,以及GET *的大小限制(儘管我會說限制高於1k;我會在某些瀏覽器上說2k,在其他一些瀏覽器上說2k)? – 2010-03-12 12:11:26

+2

@Pascal && @Pekka:看看http://www.boutell.com/newfaq/misc/urllength.html - 無論如何,我個人認爲1024字節以上的東西太長。 – dbemerlin 2010-03-12 12:14:34

-1

您可能會考慮將舊腳本中的所有$ _POST實例替換爲$ _REQUEST,這會導致它同時接受GET和POST。