Snoopy无疑是我使用过的最强大的采集类,本博也作过一些简单的入门介绍。php
近日,我完成了数个基于Snoopy的程序,如批量下载百度文档附件、论坛附件下载、本地文件批量上传,已经能比较熟练的使用此类。加上本博主要是作采集程序研究的,那么,有必要将Snoopy的一些高级功能拿出来晒晒,照顾下新人。那今天要演示的一个功能是,Snoopy模拟用户登录论坛并下载附件,并上传到网盘的一个实例。数组
经过本例,咱们要取得附件上传到网盘之后,返回附件在网盘的下载连接。这个功能,能够和火车采集器无缝结合,实现火车采集器文章、Snoopy下载附件并按自定义目录保存、附件同步上传的效果。浏览器
首先讲一下模拟用户登录须要使用到的几个重要数据。cookie
模拟一个浏览器,如Firefox 3.5,即User-agent;工具
登录论坛的Cookie值;oop
一个referer,即来源页地址;fetch
这些数据能够经过抓包工具获取,如何使用抓包工具,请看一下这里:http://www.4wei.cn/?p=1000446。网站
须要注意的是,这里的User-agent和Cookie要同步,即同时经过抓包工具获取的;这里的referer也很重要,通常的防盗链措施均是经过referer来判断的。但若是对方网站不是很变态,通常只须要一个对方的网站域名就够了。ui
下面开始今天的代码。spa
require_once 'Snoopy.class.php'; $snoopy = new Snoopy(); $snoopy->referer = 'http://www.4wei.cn'; $snoopy->strcookies = $COOKIE; $snoopy->agent = $agent; $snoopy->fetch($URI);
以上的代码创建了一个基本的采集过程,若是你的cookie和user-agent填写正确的话,那么基本上能够肯定,你已经成功登录论坛了,你能够经过如下方式查看到采集到的数据。
echo $snoopy->results; //或者 print_r($snoopy);
忽然以为此文必火,那在这里插入一段版权连接,转摘着勿删。欢迎你们收看使用Snoopy下载论坛附件,并上传到网盘的实例。下面继续将咱们获取的数据。
若是咱们刚才成功采集了一条附件下载连接,那么咱们能够在返回的数据中找到附件的名称。
//读取转向的附件地址 echo $snoopy->lastredirectaddr; //或者从头文件中读取中文件名称 print_r(join("\n", $snoopy->headers));
发现附件之后,咱们把文件保存起来,这个过程比较简单,一句话代过。
//将内容保存为一个本地文件 $savefile = SaveFile(basename($snoopy->lastredirectaddr), $snoopy->results);
这里就算已经完成了附件的下载操做。接下来作文件上传的演示,代码注释十分清楚。
//从新初始化 $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);
若是成功上传附件,则会返回一个带参数的下载地址,那咱们经过正则匹配出新的网盘下载地址便可。