最新消息:本站访问过程中有任何问题请与我联系……

一个用于网页模拟抓取比较方便的类,可以实现cookie和https等功能

技术教程 xx2008 3419浏览

bad credit debt consolidation loans

功能

1.抓取页面。即http协议的GET方法。

2.发送POST请求。即http协议的POST方法。

3.支持文件上传。

4.支持HTTPS。

5.支持自定义HTTP头。

6.支持cookie.

特点

1.内置COOKIE支持。

cookie支持是这个类库最大的亮点,自动处理cookie,保持连续抓取时的会话状态,感觉就像是在使用浏览器。

2.接口简单。

简单的接口,保证您在一行代码中实现一次漂亮的HTTP抓取,同时程序不失其可读性。

如果不需要特别复杂的功能,可以把curl丢在一边了,在简单易用性上超越curl。

3.兼容性强。

它使用php内置socket函数实现,不需要第三放php扩展,兼容SAE同时不依赖SAE,以保证你在此基础上开发的程序有足够的兼容性。可以说在功能、兼容性和易用性上都超越fetchurl。

使用参考

1.在抓取页面前,首先创建http对象

PHP代码

$http = new http;

可以传递一个参数表示是否使用cookie,默认为true.

2.抓取网址.

以抓取 http ://www.xxorg.com/path/file.php?key1=val1&key2=val2 为例

假设以下变量已赋值

PHP代码

$url = 'http://www.xxorg.com/path/file.php?key1=val1&key2=val2';

$file = 'http://www.xxorg.com/path/file.php';

$query = 'key1=val1&key2=val2';

$query_array = array( 'key1'=>'val1', 'key2'=>'val2' );

方法1:

PHP代码

$result = $http->get($url);

方法2:

PHP代码

$result = $http->get($file,$query);

注意: $http->get($url,$query)与$http->get($file,$query)相同,即第二个参数不为空时,会将第一个参数中的query_string截掉.

方法3:

PHP代码

$result = $http->get($file,$query_array);

支持多维数组的提交

使用第三个参数模拟来路:

PHP代码

$result = $http->get($url, '', $referer);

3.发送POST请求

以下面网页表单为例

HTML代码

账号:

密码:

PHP代码

$url = 'http://www.xxorg.com/file.php';

$form_data = array('username' => 'test', 'password' => 'test' );

$result = $http->post($url,$form_data);

post方法跟get方法几乎一致,第二个参数也可以是字符串,数组,多维数组,也有第三个参数,表示来路.

4.文件上传

以下面网页表单为例

HTML代码

账号:

头像1:

头像2:

PHP代码

$url = 'http://www.xxorg.com/file.php';

$form_data = array('username' => 'test' );

$files = array( array('name'=>'image1',file='1.jpg'), array('name'=>'image2',file='2.jpg') );

$result = $http->post2($url,$form_data,$files);

post2方法与post方法类似,可以说post2是post的升级版,增加了文件上传功能,第三个参数是要上传的文件,用于模拟来路的referer参数变为第四个.

小技巧:post2与post方法参数类似,但在实现上有本质的不同,post2的files参数是可选的.它们实际上是两种不同的表单提交方法,当使用post方法提交失败时可以尝试post2.

5.获取返回信息

get,post,post2返回值即为抓取到内容,同时还可以使用recv属性获取返回内容.

PHP代码

echo $http->get($url);

echo $http->recv;

同时还有以下属性可供使用

$http->header 服务器返回的http响应头

$http->lenght 返回的内容的长度

$http->status 200,404之类的状态码

$http->error 发生错误时的错误信息

$http->mime

6.cookie处理

PHP代码

$cookie = $http->export_cookie();

export_cookie方法返回当前http对象内部保存的cookie,格式是内部格式,仅用于import_cookie函数.

PHP代码

$http->import_cookie($cookie);

将由export_cookie返回的$cookie变量传递给http对象,用于还原之前的http会话状态。

PHP代码

$http->bind_cookie($cookie);

bind_cooke方法将一个由您指定的变量的引用传递给http对象,与import_cookie不同的是,此方法传递的是变量引用,http内部对cookie的操作仍将作用于$cookie变量

PHP代码

$http->get_cookie($domain,$path);

get_cookie方法获取指定域名和路径下cookie值,返回值为字符串.当然还有一个set_cookie方法,此方法与php函数setcookie参数几乎一致,不再多说.

7.调试

debug属性提供了对调试功能的开启和关闭.

PHP代码

$http->debug = true;

这将开启调试功能,即输出http请求头和http响应头信息,用于观察http通讯状态.

还有一个debug方法,用于输出自定义的调试信息,此方法同样受debug属性的控制.

实例演示

下面用不到20行的代码演示一个从ems网站查询快递信息的过程。旨在演示,不做后期的数据处理。

PHP代码

@session_start();

include 'http.class.php';

$http = new http;

$http->bind_cookie($_SESSION['ems_cookie']);

if ( isset($_GET['action']) && $_GET['action']=='img' )

exit($http->get('http://www.ems.com.cn/ems/rand'));

if ( isset($_GET['action']) && $_GET['action']=='query' )

exit( $http->post('http://www.ems.com.cn/ems/order/singleQuery_t',$_POST) );

?>

运单号:

验证码:

下载地址:

http://disk.xxorg.com/file/335cef38.html

http://go.xxorg.com/eb

zp8497586rq

转载请注明:服务器VPS折腾 » 一个用于网页模拟抓取比较方便的类,可以实现cookie和https等功能