curl_int 采集https网站 请求方法函数实现
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);
提示
curl_setopt(): CURLOPT_SSL_VERIFYHOST no longer accepts the value 1, value 2 will be used instead in
修改成
curl_setopt ( $curl_handle, CURLOPT_SSL_VERIFYHOST, 2 );
CURLOPT_SSL_VERIFYHOST
的值
- 设为
0
表示不检查证书 - 设为
1
表示检查证书中是否有CN(common name)
字段 - 设为
2
表示在1
的基础上校验当前的域名是否与CN匹配
而libcurl
早期版本中这个变量是boolean
值,为true
时作用同目前设置为2
,后来出于调试需求
,增加了仅校验是否有CN字段
的选项,因此两个值true/false
就不够用了,升级为0/1/2
三个值。
再后来(libcurl_7.28.1
之后的版本),这个调试选项由于经常被开发者用错
,被去掉了,因此目前也不支持1
了,只有0/2
两种取值。
<?php
/** curl 获取 https 请求
* @param String $url 请求的url
* @param Array $data 要發送的數據
* @param Array $header 请求时发送的header
* @param int $timeout 超时时间,默认30s
*/
function curl_https($url, $data=array(), $header=array(), $timeout=30){
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
$response = curl_exec($ch);
if($error=curl_error($ch)){
die($error);
}
curl_close($ch);
return $response;
}
// 调用
$url = 'https://www.5420.com.cn/';
$data = array('name'=>'fdipzone');
$header = array();
$response = curl_https($url, $data, $header, 5);
echo $response;
?>