PHP Curl for Rest API无效

时间:2014-01-22 18:49:27

标签: php json api rest curl

这在bash中可以正常工作:

curl https://test.url.com/api/id/98765 -H 'API_KEY: xxxxxxxxxx' -H 'Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=='

这在PHP中不起作用(没有返回任何内容):

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,'https://test.url.com/api/id/98765');
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER,  array(
                                            "API_KEY: xxxxxxxxxx8",
                                            "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=="
                                            ));         
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
$results = curl_exec($curl);
echo 'out: '.$results;

不会返回任何错误。我期待json的结果

2 个答案:

答案 0 :(得分:2)

您需要的是猜测(我们最终确定这是真的):

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);

(请注意,0false)同义。

这会阻止客户端验证远程位置的SSL证书。我建议这是因为您的网址是https://但它看起来像是一个自定义构建的解决方案,您可能还没有为其配置公共可信证书(还)。

the php docs中提供了有关CURLOPT_SSL_VERIFYPEER的更多信息。

答案 1 :(得分:0)

以下PHP代码对我来说非常适合着名的API。在这里,我必须实现CURLOPT_SSL_VERIFYPEER和CURLOPT_USERAGENT。你可以试试这个

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://testurl.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

$result = curl_exec($ch);
curl_close($ch);