2017-08-25 58 views
0

我的請求需要令牌來發出API請求。下面是他們提供的例如捲曲代碼:如何使用PHP cURL進行API請求?

curl -v -L https://api.artsy.net/api/artists/andy-warhol -H 'X-Xapp-Token:myToken' 

我的代碼:

$postdata = array(); 
$postdata['client_id'] = 'myId'; 
$postdata['client_secret'] = 'myClient'; 
$postdata['xapp_token'] = 'myToken'; 
$cc = curl_init(); 
curl_setopt($cc,CURLOPT_POST,1); 
curl_setopt($cc,CURLOPT_RETURNTRANSFER,1); 
curl_setopt($cc,CURLOPT_URL,"https://api.artsy.net/api/artists/andy-warhol"); 
curl_setopt($cc,CURLOPT_POSTFIELDS,$postdata); 
$result = curl_exec($cc); 
echo $result; 

這將導致一個JSON對象,看起來像:

{ 
    "id": "4d8b92b34eb68a1b2c0003f4", 
    "slug": "andy-warhol", 
    "created_at": "2010-08-23T14:15:30+00:00", 
    "updated_at": "2017-08-25T17:25:51+00:00", 
    "name": "Andy Warhol", 
    "sortable_name": "Warhol Andy", 
    "gender": "male", 
    "birthday": "1928", 
    "hometown": "Pittsburgh, Pennsylvania", 
    "location": "New York, New York", 
    "nationality": "American", 
//... 

但是它會導致這個結果:

{:type=>"other_error", :message=>"405 Not Allowed", "X-Frame-Options"=>"DENY", "X-Robots-Tag"=>"noindex", "Allow"=>"OPTIONS, GET, HEAD"} 

我對cURL不太熟悉,所以我試圖翻譯他們提供的示例代碼。任何幫助將深表感謝!

回答

3

您使用POST

curl_setopt($cc,CURLOPT_POST,1); 

,它看起來像API不允許POST。

..."Allow"=>"OPTIONS, GET, HEAD"

您可以檢查this Q&A以獲取如何使用GET的示例。

+0

是的,它可能期待'GET'調用,並將值作爲查詢字符串。 – ceejayoz

+0

@ceejayoz啊!謝謝你指出!我用curl_setopt($ cc,CURLOPT_CUSTOMREQUEST,'GET')替換了'curl_setopt($ cc,CURLOPT_POST,1);'現在它返回: '{「_links」:{「location」:{「href」 : 「https://api.artsy.net/api/artists/4d8b92b34eb68a1b2c0003f4」}}}'。 不幸的是,我的新問題是,我試圖訪問「href」目標,但不斷收到錯誤:'可恢復的致命錯誤:類stdClass的對象無法轉換爲字符串' '$ result = curl_exec ($ CC); $ myJson = json_decode($ result); echo $ myJson - > _ links;' 對此有何幫助?謝謝! – Sam

+0

@Sam這個新錯誤與您在此處詢問的原始問題並不真正相關,所以最好提出一個關於它的新問題。但是,我會提醒你,它可能會被作爲[如何從PHP中提取JSON數據?]的副本來關閉(https://stackoverflow.com/questions/29308898/how-do-i-extract-data -from-json-with-php),所以我建議先看看。 –