不能在 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 协议。
这是我在远程服务器上使用的 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 协议。