2016-02-08 118 views
0

我試圖使用this tutorial中詳細描述的Facebook營銷API。用-G將cURL請求翻譯爲PHP

但是我與如何翻譯這個難倒建議cURL命令行請求到它的PHP相當於:

curl -G \ 
-d 'access_token=<ACCESS_TOKEN>' \ 
https://graph.facebook.com/v2.5/<LEAD_ID> 

我通常會做到這一點:

$ch = curl_init(); 

curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_POST,1); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$access_token); 

$result = curl_exec($ch); 

但是,這會產生一個「不支持發佈請求「錯誤時嘗試運行它。我想我誤解了'-G'在命令行版本中的含義?

+1

你猜到了,它,你不明白'-G'的意思。找到它[這裏](https://curl.haxx.se/docs/manpage.html)(或:'man curl'或'curl --help')。基本上,即使您指定了「發佈數據」,它也會將請求轉換爲「GET」。 – Kenney

+0

@肯尼是對的,但這應該是一個答案,而不是一個評論。克里斯,肯尼建議的效果是,你刪除:'curl_setopt($ ch,CURLOPT_POST,1);' –

+0

謝謝,這是我解決這個問題的正確方法,將標記爲已解決,如果你想把你的回覆作爲一個問題@肯尼 –

回答

2

man curl

-G,--get

使用時,此選項將與-d,--data,--data二進制或指定的所有數據 - -data-urlencode用於HTTP GET請求,而不是POST請求,否則將使用該請求。這些數據將被附加到網址上,並帶有'?'分隔器。

沒有cURL option flag in PHP直接對應於此。您可以使用

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); 

curl_setopt($ch, CURLOPT_HTTPGET, 'GET'); 

但這幾乎沒有必要:

CURLOPT_HTTPGET

TRUE重置HTTP請求方法來獲取。由於GET是默認設置,因此只有在請求方法已更改時才需要。

您必須指定不同的請求參數:而不是設置CURLOPT_POSTFIELDS,追加其作爲查詢字符串的URL(使用urlencode或同等curl_escape如果需要的話):

curl_setopt($ch, CURLOPT_URL, $url . '?accesstoken='.urlencode('<ACCESS_TOKEN>');