-
php curl
添加时间:2013-6-2 点击量: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(/<td class=Jobname>.?<a\shref=(.?)\starget=_blank>(.?)<\/a>/s, ¥output, ¥title);
¥title[1];//链接
¥title[2];//题目
//公司名称
preg_match_all(/<td class=Companyname>.?<a href=(.?)\starget=_blank>(.?)<\/a>/s, ¥output, ¥company);
¥company[1];//链接
¥company[2];//名字
//工作地址
preg_match_all(/<td class=Companyaddress>\s(.?)\s<\/td>/s, ¥output, ¥address);
¥address[1];//地址
//公布日期
preg_match_all(/<td class=releasetime>\s(.?)\s<\/td>/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);