curl采集数据

2021-10-09


前言

curl是一个利用URL语法在命令行方式下工作的文件传输工具,功能十分强大,本文是php使用curl采集数据的案例。


一、curl简介

curl命令是一个功能强大的网络工具,它能够通过http、ftp等方式下载文件,也能够上传文件。其实curl远不止前面所说的那些功能,大家可以通过man curl阅读手册页获取更多的信息。类似的工具还有wget。curl命令使用了libcurl库来实现,libcurl库常用在C程序中用来处理HTTP请求,curlpp是libcurl的一个C++封装,这几个东西可以用在抓取网页、网络监控等方面的开发,而curl命令可以帮助来解决开发过程中遇到的问题。
它支持的协议有:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。

二、使用步骤

1.安装curl

windows平台:
网址:curl下载官网
下载后将文件解压到相应的项目位置。

2.配置及使用

代码如下(示例):

//初始化CURL句柄
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $v);
/**配置返回信息**/
//获取的信息以文件流的形式返回,不直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
/**IPV6下curl超时问题*/
//设置curl默认访问IPV4
if(defined('CURLOPT_IPRESOLVE') && defined('CURL_IPRESOLVE_V4')){
    
    
   curl_setopt($ch,CURLOPT_IPRESOLVE,CURL_IPRESOLVE_V4);
}
/**配置超时**/
//设置curl请求连接的最长秒数,如果设置为0,则无限
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
//设置curl总执行动作的最长秒数,如果设置为0,则无限
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
/**伪造X-FORWARDED-FOR,并伪造referer**/
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/x-www-form-urlencoded', 'X-FORWARDED-FOR:14.215.177.38:443', 'CLIENT-IP:14.215.177.38:443'));
curl_setopt($ch, CURLOPT_REFERER, "https://www.baidu.com/");
/**配置页面重定向**/
//跟踪爬取重定向页面
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
//指定最多的HTTP重定向的数量
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
//自动设置Referer
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
/**配置Header(请求头)**/
//Accept-Encoding编码,支持"identity"/"deflate"/"gzip",空支持所有编码
curl_setopt($ch, CURLOPT_ENCODING, "");
//不返回header部分
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_HEADER, true);
/**配置User_Agent(用户代理)**/
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)');
//设置curl使用的HTTP协议
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
/**配置POST请求**//**禁用*/
//支持post提交数据
//curl_setopt( $ch, CURLOPT_POST, true);
/**禁止证书验证防止curl输出空白**/
//禁止cURL验证对等证书
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//是否检测服务器的域名与证书上的是否一致
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
/**保存cookie,防止因重定向一直循环访问**/
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
//执行完毕
$groupData = curl_exec($ch);
//捕抓异常
if (curl_errno($ch)) {
    
    
   //执行异常时返回执行状态码为400
   $code = 400;
   $data = curl_error($ch);
}
//发送请求的字符串,即请求的header
$info = curl_getinfo($ch);
//打印错误
//$error=curl_error($ch);
//关闭cURL资源,并且释放系统资源
curl_close($ch);
//将头部信息,执行状态码,数据存入数组$res中
/**
 * data         采集的数据
 * http_code    状态码
 * http         头部信息
 * return_str   返回消耗时间,速度,数值等内容
 */
$res = array(
	      'data' => $groupData, 
	      'http_code' => $info['http_code'], 
	      'header' => $info,'return_str'=>$return_str
        );
//最后判断代码执行状态
if ($res['http_code'] == 200) {
    
    
    //采集成功进行相关操作,如对数据进行清洗整理
    //采集成功
    return 0;
}else{
    
    
    //采集失败
    return 1;
}

猜你喜欢

转载自blog.csdn.net/CrayonShinChaner/article/details/120668112