php curl的深入解析

前端之家收集整理的这篇文章主要介绍了php curl的深入解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

<FONT style="COLOR: #ff0000">一、curl使用

例如:我们采集深圳智联招聘上PHP招聘的第一页信息
<div class="codetitle"><a style="CURSOR: pointer" data="7188" class="copybut" id="copybut7188" onclick="doCopy('code7188')"> 代码如下:
<div class="codebody" id="code7188">
$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;

当然我们必须对返回的数据使用<<正则表达式>>处理,找出我们想要的那一部分,然后根据你的需要把数据填充到你网站里
<div class="codetitle"><a style="CURSOR: pointer" data="98902" class="copybut" id="copybut98902" onclick="doCopy('code98902')"> 代码如下:
<div class="codebody" id="code98902">
//职位名称
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',$company);
$company[1];//链接
$company[2];//名字
//工作地点
preg_match_all('/<td class="Companyaddress">\s
(.?)\s<\/td>/s',$address);
$address[1];//地点
//发布日期
preg_match_all('/<td class="releasetime">\s(.?)\s*<\/td>/s',$time);
$time[1];//时间
var_dump($time[1]);

<FONT style="COLOR: #ff0000">二、常用功能

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

1.post数据

<div class="codetitle"><a style="CURSOR: pointer" data="76875" class="copybut" id="copybut76875" onclick="doCopy('code76875')"> 代码如下:
<div class="codebody" id="code76875">
$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

<div class="codetitle"><a style="CURSOR: pointer" data="16396" class="copybut" id="copybut16396" onclick="doCopy('code16396')"> 代码如下:
<div class="codebody" id="code16396">
$savefile=dirname(FILE).'save.txt';
$getfile=dirname(FILE).'get.txt';
//可以分开使用
curl_setopt($ch,CURLOPT_COOKIEJAR,$savefile); //保存
curl_setopt($ch,CURLOPT_COOKIEFILE,$getfile); //读取

3.伪造IP、来路

<div class="codetitle"><a style="CURSOR: pointer" data="97833" class="copybut" id="copybut97833" onclick="doCopy('code97833')"> 代码如下:<div class="codebody" id="code97833">
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

<FONT style="COLOR: #ff0000">三、多线程

官方示例
<div class="codetitle"><a style="CURSOR: pointer" data="80080" class="copybut" id="copybut80080" onclick="doCopy('code80080')"> 代码如下:<div class="codebody" id="code80080">
// 创建一对cURL资源
$ch1 = curl_init();
$ch2 = curl_init();
// 设置URL和相应的选项
curl_setopt($ch1,"http://www.example.com/");
curl_setopt($ch1,0);
curl_setopt($ch2,"http://www.PHP.net/");
curl_setopt($ch2,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);

猜你在找的PHP相关文章