使用HTTPS的PHP-CURL

使用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(

我试图从httpsurl获取Json数据

我已经为http测试并运行了代码。。。 但是我还没有找到一个适用于https的工作版本。这需要是安全的代码,而不是快速修复请

这是我的http版本

<?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
选项。