php - 无法在 WAMP 上 curl HTTPS URL,但可以使用 BASH 在远程服务器上工作

标签 php ssl curl

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

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

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

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 地址,我至少会收到一个响应,但它是 Unauthorized CC: private 错误 -

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

最佳答案

我想我找到了答案,问题是您的 curl 请求无法验证 ssl peer。 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 =

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

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

关于php - 无法在 WAMP 上 curl HTTPS URL,但可以使用 BASH 在远程服务器上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28727411/

相关文章:

php - 修复 file_get_contents 权限被拒绝的错误

php - MySQL JOIN,通过 PHP,当其中一个表中没有数据时?

javascript - 如何使用 AJAX 从 HTTP 服务器访问 HTTPS API

php - 如何强制 Laravel 生成 https 链接?

node.js - nodejs passport ldapauth "Cannot read ' on' property of undefined"

ruby-on-rails - 代理后面的 Rails 应用程序,使用 SSL,将路径呈现为 "http://"

c++ - 以安全的方式将 (void *) 转换到任何其他人

javascript - 如何在 curl 中使用谷歌图片搜索

javascript - 如何从 FORM 中获取选项 VALUE 而无需在 php 中提交?

php - 如何在 NODE.JS 上模仿 php crypt()