使用HTTPS的PHP-CURL
我试图从httpsurl获取Json数据 我已经为http测试并运行了代码。。。 但是我还没有找到一个适用于https的工作版本。这需要是安全的代码,而不是快速修复请 这是我的http版本使用HTTPS的PHP-CURL,php,curl,Php,Curl,我试图从httpsurl获取Json数据 我已经为http测试并运行了代码。。。 但是我还没有找到一个适用于https的工作版本。这需要是安全的代码,而不是快速修复请 这是我的http版本 <?php $key = "admin"; //user $secret = "admin"; //pass $api_ep = "http://$Hostname:$Port/$address"; if ($key && $secret){ $curl_opts = array(
<?php
$key = "admin"; //user
$secret = "admin"; //pass
$api_ep = "http://$Hostname:$Port/$address";
if ($key && $secret){
$curl_opts = array(
CURLOPT_HTTPHEADER=>array("Accept: application/json"),
CURLOPT_VERBOSE=>false,
CURLOPT_HEADER=>false,
CURLOPT_POST=>false,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_HTTPAUTH=>CURLAUTH_DIGEST,
CURLOPT_USERPWD=>$key.":".$secret,
CURLOPT_URL=> $api_ep
);
}
function disp($opts,$var){
$ch = curl_init();
curl_setopt_array($ch, $opts);
$raw_resp = curl_exec($ch);
// $array_resp = json_decode($raw_resp);
//print_r($array_resp);
print_r($raw_resp);
curl_close($ch);
//$array = json_decode($raw_resp, true);
//print_r($array_resp);
//disp_table($array_resp, $var);
}
disp($curl_opts,$Type);
?>
提前感谢 添加以下内容以禁用SSL验证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
Curl SSL无法验证自签名证书,因此,如果https主机使用自签名证书,您将无法连接到它们
function disp($opts,$var){
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt_array($ch, $opts);
$raw_resp = curl_exec($ch);
print_r($raw_resp);
curl_close($ch);
}
如果您没有任何敏感数据,可以尝试将
CURLOPT\u SSL\u VERIFYPEER
设置为FALSE
否则,您必须验证证书
因为Curl没有内置的根证书。您需要将其显式指向cacert.pem文件:
curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cert/file/cacert.pem');
否则,curl将无法验证通过ssl发回的证书。每次在curl中使用SSL时,都可以使用相同的根证书文件
您可以在此处获取cacert.pem
文件:
注意:
将
CURLOPT\u SSL\u VERIFYPEER
设置为false将允许中间人攻击
。webaware.com.au的rmckay对此发出警告,并提供了另一种可行的解决方案:在curl网站下载CA根证书捆绑包并将其保存在服务器上。请参见给定站点,向下滚动至用户评论下面的代码适用于https
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $basicAuthUrl);
$header = array();
$header[] = 'Content-length: 29';
$header[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
$header[] = 'Authorization: Basic ' . $keyAndSecretEncoded;
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
$result = curl_exec($ch);
curl_close($ch);
您可能需要设置
CURLOPT\u SSL\u VERIFYPEER
和CURLOPT\u SSL\u VERIFYHOST
选项。