1. 云栖社区>
  2. PHP教程>
  3. 正文

php使用curl访问https示例分享

作者:用户 来源:互联网 时间:2017-12-01 13:13:07

示例

php使用curl访问https示例分享 - 摘要: 本文讲的是php使用curl访问https示例分享,  curl是利用URL语法在命令行方式下工作的开源文件传输工具,下面介绍一下php使用curl访问https的示例,大家参考使用吧为方便说明,先上代码吧 代码如下:/**  * curl POST  *  * @param   strin

 curl是利用URL语法在命令行方式下工作的开源文件传输工具,下面介绍一下php使用curl访问https的示例,大家参考使用吧

为方便说明,先上代码吧 代码如下:/**  * curl POST  *  * @param   string  url  * @param   array   数据  * @param   int     请求超时时间  * @param   bool    HTTPS时是否进行严格认证  * @return  string  */  function curlPost($url, $data = array(), $timeout = 30, $CA = true){         $cacert = getcwd() . '/cacert.pem'; //CA根证书      $SSL = substr($url, 0, 8) == "https://" ? true : false;       $ch = curl_init();      curl_setopt($ch, CURLOPT_URL, $url);      curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout-2);      if ($SSL && $CA) {          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书          curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布)          curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配      } else if ($SSL && !$CA) {          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书          curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名      }      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);      curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); //避免data数据过长问题      curl_setopt($ch, CURLOPT_POST, true);      curl_setopt($ch, CURLOPT_POSTFIELDS, $data);      //curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); //data with URLEncode       $ret = curl_exec($ch);      //var_dump(curl_error($ch));  //查看报错信息       curl_close($ch);      return $ret;    }      如果URL地址是https打头,那就走SSL,否则就走普通的HTTP协议。 是否走HTTPS的话就安全了吗。其实SSL也有不同的验证程度。 例如需不需要验证证书中的公用名呢。(BTW:公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)。) 需要验证主机名吗。 是任何证书都信任呢还是只信任CA颁布的呢。 (我擦嘞,电池快没点了,只捡关键地儿说了 - -|||) 如果网站SSL证书买的是CA的(通常比较贵),那么访问时可以使用比较严格的认证,即: 代码如下:curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书 curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布) curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配  如果网站的证书是自己生成的,或者是网上的小机构申请的,那么访问时如果使用严格认证则不会通过,直接返回false。(对了,返回false时可以打印curl_error($ch)查看具体错误信息。)此时可以根据情况通过降低验证程度来保证正常访问,例如: 代码如下:curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名(为0也可以,就是连域名存在与否都不验证了)  平时我们使用浏览器访问各个https网站时,有时会遇到证书不受信的提示,其实就是因为这些网站的证书不是正规CA机构颁布的。 市面上各种浏览器中都内置了CA根证书列表信息,访问有CA颁布证书的网站时,会根据根证书验证这些网站的证书,所以就不会有这个提示了。 关于CA根证书文件,其实就是包含了各个主要CA机构的公钥证书,用来验证网站的证书是否是这些机构颁发的。 这里的这个文件是来源于mozilla的源码树,又转换成PEM格式证书文件。(大家可以到这里下载现成的http://curl.haxx.se/ca/cacert.pem) 最后说一个和SSL无关的东西:  代码如下:curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));  这个主要是为了解决POST时数据过长问题 

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索示例 ,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备