Home  >  Article  >  php教程  >  php curl的深入解析

php curl的深入解析

WBOY
WBOYOriginal
2016-06-13 11:52:391035browse

curl可以说是php里一个非常强大的功能,每个php程序员都应该学习并熟悉curl,使用curl前确保你的php_curl扩展已经开启。

一、curl使用
例如:我们采集深圳智联招聘上PHP招聘的第一页信息

复制代码 代码如下:


$url='http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E6%B7%B1%E5%9C%B3&kw=php&sm=0&p=1';
//初始化
$ch = curl_init();
//设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不自动输出内容
curl_setopt($ch, CURLOPT_HEADER, 0);//不返回头部信息
//执行curl
$output = curl_exec($ch);
//错误提示
if(curl_exec($ch) === false){
    die(curl_error($ch));
}
//释放curl句柄
curl_close($ch);
header('Content-type: text/html; charset=utf-8');
echo $output;


当然我们必须对返回的数据使用>处理,找出我们想要的那一部分,然后根据你的需要把数据填充到你网站里

复制代码 代码如下:


//职位名称
preg_match_all('/

.*?(.*?)/s', $output, $title);
$title[1];//链接
$title[2];//标题
//公司名称
preg_match_all('/
.*?(.*?)/s', $output, $company);
$company[1];//链接
$company[2];//名字
//工作地点
preg_match_all('/
\s*(.*?)\s*/s', $output, $address);
$address[1];//地点
//发布日期
preg_match_all('/ \s*(.*?)\s*/s', $output, $time);
$time[1];//时间
var_dump($time[1]);

二、常用功能
curl的核心是通过设置各种选项来达到各种功能,这里我们介绍几种常用的选项。
1.post数据

复制代码 代码如下:


$post=array(
'uid'=>'test',
'pwd'=>'curl123'
);
curl_setopt($ch, CURLOPT_POST, 1);//设置为POST方式
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));//POST数据


2.cookie

复制代码 代码如下:


$savefile=dirname(__FILE__).'save.txt';
$getfile=dirname(__FILE__).'get.txt';
//可以分开使用
curl_setopt($ch, CURLOPT_COOKIEJAR, $savefile); //保存 
curl_setopt($ch, CURLOPT_COOKIEFILE, $getfile); //读取


3.伪造IP、来路

复制代码 代码如下:


curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8'));//构造IP 
curl_setopt($ch, CURLOPT_REFERER, "http://www.baidu.com");//构造来路 


curl_setopt选项大全,详见PHP手册:http://www.php.net/manual/zh/function.curl-setopt.php
三、多线程
官方示例

复制代码 代码如下:


// 创建一对cURL资源
$ch1 = curl_init();
$ch2 = curl_init();
// 设置URL和相应的选项
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);
// 创建批处理cURL句柄
$mh = curl_multi_init();
// 增加2个句柄
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
$running=null;
// 执行批处理句柄
do {
    usleep(10000);
    curl_multi_exec($mh,$running);
} while ($running > 0);
// 关闭全部句柄
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn