php使用curl读取远程http和https网页内容实例源码

时间:2016-11-03
php curl是利用URL语法在命令行方式下工作的开源文件传输工具,本文章向大家介绍php使用curl访问https与http网页的示例源码,需要的朋友可以参考一下。

php curl函数组可以帮助我们把机器为装成人行为来抓取网站,下面来分享两个例子,一个是访问http网页,一个访问https网页,下面一起看看。

php使用curl访问https页面

今日在做一个项目,需要curl获取第三方的API,对方的API是https方式的。

之前使用curl能获取http请求,但今天获取https请求时,出现了以下的错误提示:证书验证失败。

SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

解决方法为在curl请求时,加入如下代码

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在

完整代码:

<?php 
/** curl 获取 https 请求 
* @param String $url 请求的url 
* @param Array $data 要發送的數據 
* @param Array $header 请求时发送的header 
* @param int $timeout 超时时间,默认30s 
* 作者:码农教程  http://www.manongjc.com
*/ 
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, true); // 从证书中检查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.example.com/api/message.php'; 
$data = array('name'=>'fdipzone'); 
$header = array(); 

$response = curl_https($url, $data, $header, 5); 

echo $response; 
?>

php使用curl访问http页面

如何我们请求的是http网页,则不需要以下代码:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在

直接这样就可以:

$curl=curl_init();
curl_setopt($curl,CURLOPT_URL, "http://www.manongjc.com/article/1579.html");
curl_setopt($curl,CURLOPT_HEADER,1);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_POST,1);
curl_setopt($curl,CURLOPT_PROXYTYPE,CURLPROXY_SOCKS5);//使用了SOCKS5代理
curl_setopt($curl, CURLOPT_PROXY, "fuck.3322.org:1080");    
$data = array('user' => "geek", 'password' => 'fuck');
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
//curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, 1);如果是HTTP代理
//curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie.txt');cookie你懂的
$request = curl_exec($curl);
//var_dump($request);
curl_close($curl);