编 写:袁 亮 时 间:2015-07-15 说 明:使用curl抓取https数据 一、为什么需要? 未了安全考虑,很多网站使用了https域名 https需要客户端和服务端都做openssl的验证 二、抓取设置 1、方法一,设置为不验证证书【直接用这个,除非安全性要求特别高】 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); ps:抓百度的时候需要注意,referer设置为百度本身的返回会又问题,可以自己尝试看看 2、设置一个正确的证书验证 2.1 下载最新的证书到本地 wget http://curl.haxx.se/ca/cacert.pem 2.2 设置使用证书 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true); ; curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/cacert.pem'); 三、一些错误情况(出错的情况下,开启curl_error($ch)查看) 1、centos系统,如果不知道证书地址,则使用系统证书 /etc/pki/tls/certs/ca-bundle.crt 2、如果系统证书过期,或者错误,则会显示签名出错 通过wget http://curl.haxx.se/ca/cacert.pem 来更新最新的证书 3、显示“段错误”,有可能是libcurl和php版本不一致导致 线上centos 6.2和php 5.2.17,出现过该问题 4、当不能确定是否是某台服务器出问题的时候,写个简单的demo,分别在几台服务器运行看下是否有问题 四、尚未解决 1、采用浏览器下载或者导出的证书,在程序中一直未能使用成功