PHP cURL工具的简单介绍

cURL一般是指使用URL语法进行数据传递的命令行工具和库,本文所介绍的是其PHP拓展最基本的使用。php


cURL主要用来进行数据抓取,固然,还有更多强大的功能,一些复杂的操做,例如处理Cookie、表单数据提交等实现起来也要比其余方法简单。html


1.安装与使用数组

Windows下:修改php.ini的设置,打开php_curl.dll拓展便可。浏览器


Linux下: # wget http://curl.haxx.se/download/curl-7.17.1.tar.gz安全

# tar zxvf curl-7.17.1.tar.gz  //解压服务器

#cd curl-7.17.1curl

# ./configure --prefix=/usr/local/curl函数

# make工具

# make installpost

安装完成后经过phpinfo()来查看是否安装成功。

ps:若是是用的集成包来搭建PHP环境的话,通常而言cURL的功能都是开启的。



2.用cURL抓取网页的基本流程

最基本的抓取网页的步奏主要分为如下几步:

(1)初始化

(2)设置相关选项

(3)执行获取网页文档

(4)释放cURL句柄

例如:咱们以抓取百度首页为例,代码示范这个流程:

<?php
//初始化一个curl句柄
$ch = curl_init();
//对相关选项进行设置
curl_setopt($ch,CURLOPT_URL,'www.baidu.com');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//执行抓取
$output = curl_exec($ch);
//释放curl句柄
curl_close($ch);
//输出抓取的数据
echo $output;
?>

在整个流程中,比较重要的步奏其实在于选项设置部分,即curl_setopt()函数,来指定URL请求的细节,具体设置选项的意义在后面介绍。


为了使上述代码具备可调试性,如今增长几行代码,来输出cURL执行后的相关信息。

<?php
......
curl_exec($ch);
//获取执行请求后相关信息
$info = curl_getinfo($ch);
print_r($info);//打印信息数组
?>

对于抓取百度首页,打印出的信息数组以下:

Array
(
[url] => HTTP://www.baidu.com/  
[content_type] => text/html     
[http_code] => 200
[header_size] => 689
[request_size] => 52
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.016
[namelookup_time] => 0
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 14613
[speed_download] => 913312
[speed_upload] => 0
[download_content_length] => 14613
[upload_content_length] => 0
[starttransfer_time] => 0.016
[redirect_time] => 0
[redirect_url] => 
.........
)

其中,能够经过size_download字段信息来校验下载的信息是否完整:

对抓取的数据的filesize进行大小计算,来对比返回信息中size_download字段。

<?php
......
file_put_contents("D:/temp/test.html", $output);
$size = filesize('D:/temp/test.html');
if($size==$info['size_download'])
{
echo 'success';
}
else
{
echo 'fail';
}
?>



3.用cURL伪造头信息

有些网站只容许手机端访问,例如腾讯的手机网(3g.qq.com),当用浏览器直接输入地址访问时,会跳转到http://3gqq.qq.com/,这是由于腾讯会识别访问该网址的UA(User Agent),来判断用户所使用的设备,进而进行相应的跳转,因此能够用cURL模拟手机UA来访问。

在选项设置中添加:

curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Linux; U; Android 4.1.1; zh-cn; MI 2S Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0");

来模拟安卓手机登录访问。

返回的数据截图:

        

很显然,是手机网页。



4.cURL POST发送数据

有的网页经过form表单向服务器提交数据,当提交的method设置为post时候,咱们也能够用cURL来进行提交。例如:


<?php
//初始化一个curl句柄
$ch = curl_init();
$postdata = array('name'=>'dog','age'=>'999','address'=>'china');
//对相关选项进行设置
curl_setopt($ch,CURLOPT_URL,'http://localhost/form.php');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//设置post选项
curl_setopt($ch, CURLOPT_POST, 1);
//绑定post变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
//执行
$output = curl_exec($ch);
//释放curl句柄
curl_close($ch);
echo $output;
?>


其中,form.php脚本将提交的form数据进行打印输出。

执行脚本后输入以下:

Array ( [name] => dog [age] => 999 [address] => china )

也能够用这个方法向某些安全性较差的网站、留言板进行数据提交或者制做一个灌水机器人。


5.cURL相关设置项

前面曾经说过,cURL中灵魂性的东西就是选项设置,经过设置各类选项来指定cURL的细节。选项过多,不一一罗列,能够参考这里

相关文章
相关标签/搜索