php curl访问调用https时报错解决办法

七月 09, 2019 | views
Comments 0

PHP 调用CURL提示错误:SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed。这个是因为证书过期导致的。

SSL-ERROR

需要到 http://curl.haxx.se/ca/cacert.pem 下载信任证书。下载后,使其生效有两种方法:

第一种方法:修改 php.ini,找到 [curl]节点,如果没有,可以在php.ini底部添加。

  1. [curl] 
  2. ;修改为 http://curl.haxx.se/ca/cacert.pem 保存的路径 
  3. curl.cainfo="d:/php/cacert.pem" 

第二种方法:保存到 程序所在目录,在调用curl的时候,增加一句:

  1. <?php 
  2.     #cacert.pem 到 http://curl.haxx.se/ca/cacert.pem 下载 
  3.     curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem'); 
  4. ?> 

可以使用下面代码,自动识别https或http:

  1. function curlPost($url$data$timeout = 30) 
  2.  { 
  3.      $ssl = substr($url, 0, 8) == "https://" ? TRUE : FALSE; 
  4.      $ch = curl_init(); 
  5.      $opt = array
  6.              CURLOPT_URL     => $url
  7.              CURLOPT_POST    => 1, 
  8.              CURLOPT_HEADER  => 0, 
  9.              CURLOPT_POSTFIELDS      => (array)$data
  10.              CURLOPT_RETURNTRANSFER  => 1, 
  11.              CURLOPT_TIMEOUT         => $timeout
  12.              ); 
  13.      if ($ssl
  14.      { 
  15.          $opt[CURLOPT_SSL_VERIFYHOST] = 1; 
  16.          $opt[CURLOPT_SSL_VERIFYPEER] = FALSE; 
  17.      } 
  18.      curl_setopt_array($ch$opt); 
  19.      $data = curl_exec($ch); 
  20.      curl_close($ch); 
  21.      return $data
  22.  } 
  23.  $data = curlPost('https://www.phpfensi.com'array('p'=>'hello')); 
  24.  echo ($data); 



zend