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

Can't CURL HTTPS URL on WAMP but works on remote server using BASH

这是我在远程服务器上使用的 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 站点,那么它 returns -

HTTP/1.1 401 Unauthorized
Cache-Control: private

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

我不知道这是我的代码问题还是我的 WAMP 服务器问题。有什么想法吗?

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

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

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

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

现在打开 php.ini 文件并找到以 ; curl.cainfo =

取消注释行 "remove the ; in front" 并添加 cacert.pem 文件的绝对路径。我的看起来像这样: curl.cainfo = C:\wamp\bin\php\php5.5.12\cacert.pem

现在重新启动 wamp,瞧!我可以在 wamp 上通过 curl 愉快地打开 https 协议。