2014-09-03 127 views
5

其他人已經問過如何從perl,java,bash等等做到這一點,但我需要在PHP中做到這一點,並且我沒有看到任何已經被問到的與PHP有關的具體問題。如何使用cURL在PHP中使用GET和POST參數提出請求?

我的代碼:

$ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $result = curl_exec($ch); 

這是行不通的。目標網站有print_r($_GET); print_r($_POST);,所以當我檢查$result時,我應該能夠看到正在發送的字段。但是,$ _POST數組是空的 - 我只能看到get變量。如果我從$ url中刪除?...查詢字符串,則POST數組將正確填充。但是現在我沒有GET參數。我該怎麼做呢?

我的具體情況是,我需要發送太多的數據以適應查詢字符串,但我無法將它全部發送爲POST,因爲我要提交的網站正在爲發佈的數據選擇處理程序基於GET字符串中的變量。我可以嘗試改變,但理想情況下,我希望能夠在同一查詢中發送獲取和發佈數據。

+0

http://hayageek.com/php-curl-post-get/ – 2014-09-03 14:21:01

+1

你不能同時執行一個POST和一個GET,你可以添加一些查詢字符串到你的url,但是要添加POST變量,你必須做一個POST。 – randomizer 2014-09-03 14:22:04

+0

@ParagTyagi是的,這是一個非常好的基礎教程,但它不能解決我的問題 - 我怎樣在同一時間發送GET和POST *? – Benubird 2014-09-03 14:22:18

回答

9
# GET query goes in the URL you're hitting 
$ch = curl_init('http://example.com/script.php?query=parameter'); 
# POST fields go here. 
curl_setopt($ch, CURLOPT_POSTFIELDS, array('post' => 'parameter', 'values' => 'go here')); 

PHP本身不會決定是否執行POST忽略GET參數。無論使用何種類型的http動詞加載頁面,它都會填充$ _GET - 如果URL中有查詢參數,它們將進入$ _GET。

如果你沒有得到$ _POST和$ _GET,那麼有些東西會導致重定向或以其他方式殺死某些東西。例如你有沒有檢查$_SERVER['REQUEST_METHOD']以查看你的代碼是否實際以POST方式運行?如果帖子未實際執行,PHP將不會填充$ _POST。您可能已將帖子發送到服務器,但這並不意味着您的代碼實際上將在POST機制下執行 - 例如,一個mod_rewrite重定向。

由於您開啓了FOLLOW_REDIRECT,因此您只是簡單地假設您實際上在執行代碼時獲取了帖子。

+0

這就是我正在做的,但它*不起作用*!我錯過了什麼嗎?有我需要的一些特殊的php.ini設置嗎? – Benubird 2014-09-03 14:27:07

+0

@Benubird不,沒有特別的設置。這是它的工作原理,如果它不適合你,應該發佈你的實際代碼。你的代碼中沒有任何地方顯示你的URL。它絕對有效,所以你的網址必須不正確。 – Brad 2014-09-03 14:28:23

+0

@Brad這是我的網址:'https://ec2-54-225-37-120.compute-1.amazonaws.com/wordpress/?wc-api = paddle_wc_payment_gateway' – Benubird 2014-09-03 14:31:34

3

我不知道也許你已經有,但是你的$ url有所需的獲取參數?像:

$url = "http://example.com/index.php?param1=value1&param2=value2"; 
+0

是的,它確實 - 就像我在問題中所說的那樣,我可以看到帖子字段或獲取字段,但不能同時看到兩個字段。 – Benubird 2014-09-03 14:25:01

+0

這不回答這個問題。 – randomizer 2014-09-03 14:25:49

+0

@randomizer它不怎麼樣? – Brad 2014-09-03 14:26:06