使用Snoopy下载论坛附件,并上传到网盘的实例
Snoopy无疑是我使用过的最强大的采集类,本博也做过一些简单的入门介绍。
近日,我完成了数个基于Snoopy的程序,如批量下载百度文档附件、论坛附件下载、本地文件批量上传,已经能比较熟练的使用此类。加上本博主要是做采集程序研究的,那么,有必要将Snoopy的一些高级功能拿出来晒晒,照顾下新人。那今天要演示的一个功能是,Snoopy模拟用户登陆论坛并下载附件,并上传到网盘的一个实例。
通过本例,我们要取得附件上传到网盘以后,返回附件在网盘的下载链接。这个功能,可以和火车采集器无缝结合,实现火车采集器文章、Snoopy下载附件并按自定义目录保存、附件同步上传的效果。
首先讲一下模拟用户登陆需要使用到的几个重要数据。
- 模拟一个浏览器,如Firefox 3.5,即User-agent;
- 登陆论坛的Cookie值;
- 一个referer,即来源页地址;
这些数据可以通过抓包工具获取,如何使用抓包工具,请看一下这里:http://www.4wei.cn/?p=1000446。
需要注意的是,这里的User-agent和Cookie要同步,即同时通过抓包工具获取的;这里的referer也很重要,一般的防盗链措施均是通过referer来判断的。但如果对方网站不是很变态,一般只需要一个对方的网站域名就够了。
下面开始今天的代码。
[php]
require_once ‘Snoopy.class.php’;
$snoopy = new Snoopy();
$snoopy->referer = ‘http://www.4wei.cn’;
$snoopy->strcookies = $COOKIE;
$snoopy->agent = $agent;
$snoopy->fetch($URI);
[/php]
以上的代码建立了一个基本的采集过程,如果你的cookie和user-agent填写正确的话,那么基本上可以确定,你已经成功登陆论坛了,你可以通过以下方式查看到采集到的数据。
[php]
echo $snoopy->results;
//或者
print_r($snoopy);
[/php]
突然觉得此文必火,那在这里插入一段版权链接,转摘着勿删。欢迎大家收看使用Snoopy下载论坛附件,并上传到网盘的实例。下面继续将我们获取的数据。
如果我们刚才成功采集了一条附件下载链接,那么我们可以在返回的数据中找到附件的名称。
[php]
//读取转向的附件地址
echo $snoopy->lastredirectaddr;
//或者从头文件中读取中文件名称
print_r(join("\n", $snoopy->headers));
[/php]
发现附件以后,我们把文件保存起来,这个过程比较简单,一句话代过。
[php]
//将内容保存为一个本地文件
$savefile = SaveFile(basename($snoopy->lastredirectaddr),
$snoopy->results);
[/php]
这里就算已经完成了附件的下载操作。接下来做文件上传的演示,代码注释十分清楚。
[php]
//重新初始化
$snoopy = new Snoopy();
//设置模拟提交的类型为 ‘multipart/form-data’,知道为什么不。
$snoopy->set_submit_multipart();
//或者手工指定发布类型
//$snoopy->_submit_method = ‘multipart/form-data’;
//要提交的程序路径,即Form的action地址,决对路径
$URI = ‘http://www.rmdown.com/upload.php’;
//模拟提交时的一些参数,多个参数可以用数据保存
$formvars[‘upload’] = ‘php’;
//将要上传的文件加入队列中,多个文件可以使用数组保存,这里的file是文件上传表单的name
$formfiles[‘file’] = ‘./uploads/xxoo.rar’;
//执行模拟提交
$snoopy->submit($URI, $formvars, $formfiles);
[/php]
如果成功上传附件,则会返回一个带参数的下载地址,那我们通过正则匹配出新的网盘下载地址即可。
下面给出两张图片Demo:
最后是AD:有需要做类似功能开发的朋友,可以联系我,QQ:130775.
这玩意儿真不错,居然今天才发现,得研究研究。