将cURL命令行转换为PHP cURL

5

我需要将这个 cURL 命令翻译成 PHP cURL 代码:

> curl --get 'https://api.twitter.com/1/followers/ids.json' --data
> 'cursor=-1&screen_name=somename' --header 'Authorization: OAuth
> oauth_consumer_key="key", oauth_nonce="nonce",
> oauth_signature="signature", oauth_signature_method="HMAC-SHA1",
> oauth_timestamp="timestamp", oauth_token="token", oauth_version="1.0"'
> --verbose
我尝试过这个方法,但似乎没有起作用:
> $ch = curl_init();
> curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth oauth_consumer_key="key", oauth_nonce="nonce", oauth_signature="signature", oauth_signature_method="HMAC-SHA1", oauth_timestamp="timestamp", oauth_token="token", oauth_version="1.0"'));
> curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
> curl_setopt($ch, CURLOPT_VERBOSE, 1);
> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
> curl_setopt($ch, CURLOPT_HTTPGET, 1);
> curl_setopt($ch, CURLOPT_URL, 'https://api.twitter.com/1/users/show.json?cursor=-1&screen_name=somename');
> $page = curl_exec($ch);
> curl_close($ch);

我遇到了错误

SSL证书问题,请确认CA证书是否有效。详情:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败。

然而,标准的curl命令可以正常工作。


http://php.net/manual/en/book.curl.php - user1280616
1个回答

2

您需要为curl提供证书链,以使其验证Twitter的SSL证书有效。为此,请从这里下载所需的证书签名,并将它们保存到一个纯文本文件中(我假设您将其命名为cacert.pem)。

然后,在发起请求之前,设置CURLOPT_CAINFO指向此文件:

// assumes file in same directory as script
curl_setopt($ch, CURLOPT_CAINFO, 'cacert.pem');

另外,明确启用SSL证书验证而不是依赖默认设置也是一个好主意:

curl_setopt($ch, CURLOPT_VERIFYPEER, true);

现在我遇到了这个错误:设置证书验证位置:CAfile:cacert.pem CApath:none 我该怎么办? - loudislav
@loudislav:嗯,也许你需要将CURLOPT_CAPATH设置为.(假设证书文件在当前目录中)。还要三次确保证书文件的路径正确。 - Jon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接