2017-08-25 57 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),所以我建议先看看。 –