不能在WAMP上使用CURL HTTPS URL,但可以使用BASH在远程服务器上运行

时间:2015-02-25 19:00:10

标签: php ssl curl

这是我在远程服务器上使用的BASH命令 -

curl -i -H "Content-Type: application/json" -H "Authorization: USERNAME:PASSWORD" "https://api7.publicaster.com/Rest/Ping.svc/?format=json"

这是我的PHP脚本上的代码,我在WAMP本地测试环境中运行以请求相同的信息。

header("Content-Type: application/json");
$encrypted_account_id = 'USERNAME';
$api_password = 'PASSWORD';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://api7.publicaster.com/Rest/Ping.svc/?format=json");
$headers = array();
$headers[] = 'Content-type: application/json';
$headers[] = 'Authorization: $encrypted_account_id:$api_password';
curl_setopt($ch, CURLOPT_HEADER, $headers);

$server_output = curl_exec($ch);
curl_close($ch);
print_r($server_output);

如果在我的PHP脚本上我请求HTTP站点,那么它返回 -

HTTP/1.1 401 Unauthorized
Cache-Control: private

如果在我的PHP脚本上我请求HTTPS站点,那么它只返回空白。我有一个自签名SSL证书并启用了SSL,我可以访问我的WAMP服务器的HTTPS部分,但是我收到了警告。

我无法弄清楚这是我的代码还是我的WAMP服务器的问题。有什么想法吗?

如果我将以下内容添加到我的代码并尝试CURL HTTPS地址,我至少会收到响应,但它是未经授权的CC:私有错误 -

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

1 个答案:

答案 0 :(得分:9)

我想我找到了答案,问题是你的curl请求无法验证ssl peer。 Windows不会自动拥有CA证书来进行验证。

所以这就是我通过curl为wamp修复我的https请求所做的工作。 在此处下载 cacert.pem 文件http://curl.haxx.se/docs/caextract.html并将其放在您的PHP文件夹中,我的位于: C:\wamp\bin\php\php5.5.12

现在打开php.ini文件,找到以。开头的行 ; curl.cainfo =

取消评论该行"删除;在前面"并添加cacert.pem文件的绝对路径。我看起来像这样: curl.cainfo = C:\wamp\bin\php\php5.5.12\cacert.pem

现在重启wamp并瞧!我可以通过curl on wamp愉快地打开https协议。