参考 :
CA证书下载地址 :
PHP 使用 cURL 模块访问 https 时认证问题
- $ch = curl_init();
- $options = array(
- CURLOPT_URL=>$url,
- // 返回状态大于400时报错错误, 默认忽略
- CURLOPT_FAILONERROR=>true,
- // 将返回内容赋值到变量, 默认直接输出
- CURLOPT_RETURNTRANSFER=>false,
- // 汇报全部的连接过程和意外
- CURLOPT_VERBOSE => 1,
- /*
- 将verbose存储在资源中
- curl_setopt($ch, CURLOPT_STDERR, fopen('log.log', 'a+'));
- OR
- curl_setopt($session, CURLOPT_FILE, $logfh);
- */
- //显示头部信息
- // CURLOPT_HEADER => TRUE,
- CURLOPT_SSLVERSION => 3,
-
- // **关键部分**
- // 这里的路径指向认证服务器证书的CA证书, 不是服务器的证书
- CURLOPT_CAINFO=>'A:\xxx\cert\cacert.pem',
- //CURLOPT_CAPATH=>dirname(__FILE__),
-
- // 连接时使用 SSL/TLS 认证 , 一般和下面的 CURLOPT_SSL_VERIFYHOST 一起用
- // 忽略SSL/TLS认证, 2者同时为假
- CURLOPT_SSL_VERIFYPEER=>TRUE,
- // 认证证书中公用名称, 一般指证书中的 Common Name 即域名
- CURLOPT_SSL_VERIFYHOST=>2,
-
- //CURLOPT_HTTP200ALIASES=>[200],
- // 设置代理
- //CURLOPT_PROXY=>'http://127.0.0.1:8989',
- CURLOPT_POST=>true,
- // POST 内容, 需要urlencode处理一下
- CURLOPT_POSTFIELDS=>$data,
- // 设置头部
- CURLOPT_HTTPHEADER=>$header,
- );
- curl_setopt_array($ch, $options);
-
- try{
- $reponse = curl_exec($ch);
- if($reponse === false){
- throw new Exception("访问异常: " . curl_error($ch), 400);
- }
- }catch(Exception $e){
- echo $e->getMessage();
- }
- //echo $reponse;
- // print_r(curl_getinfo($ch));
- curl_close($ch);