为什么80%的码农都做不了架构师?>>>   

Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单。

下载地址: http://sourceforge.net/project/showfiles.php?group_id=2091

Snoopy的一些特点:

1抓取网页的内容 fetch
2 抓取网页的文本内容 (去除HTML标签) fetchtext
3抓取网页的链接,表单 fetchlinks fetchform
4 支持代理主机
5支持基本的用户名/密码验证
6 支持设置 user_agent, referer(来路), cookies 和 header content(头文件)
7支持浏览器重定向,并能控制重定向深度
8能把网页中的链接扩展成高质量的url(默认)
9提交数据并且获取返回值
10 支持跟踪HTML框架
11支持重定向的时候传递cookies
要求php4以上就可以了 由于本身是php一个类 无需扩支持 服务器不支持curl时候的最好选择,

类方法:

fetch($URI)
———–

这是为了抓取网页的内容而使用的方法。
$URI参数是被抓取网页的URL地址。
抓取的结果被存储在 $this->results 中。
如果你正在抓取的是一个框架,Snoopy将会将每个框架追踪后存入数组中,然后存入 $this->results。

fetchtext($URI)
—————

本方法类似于fetch(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回网页中的文字内容。

fetchform($URI)
—————

本方法类似于fetch(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回网页中表单内容(form)。

fetchlinks($URI)
—————-

本方法类似于fetch(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回网页中链接(link)。
默认情况下,相对链接将自动补全,转换成完整的URL。

submit($URI,$formvars)
———————-

本方法向$URL指定的链接地址发送确认表单。$formvars是一个存储表单参数的数组。

submittext($URI,$formvars)
————————–

本方法类似于submit(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回登陆后网页中的文字内容。

submitlinks($URI)
—————-

本方法类似于submit(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回网页中链接(link)。
默认情况下,相对链接将自动补全,转换成完整的URL。

类属性: (缺省值在括号里)

$host 连接的主机
$port 连接的端口
$proxy_host 使用的代理主机,如果有的话
$proxy_port 使用的代理主机端口,如果有的话
$agent 用户代理伪装 (Snoopy v0.1)
$referer 来路信息,如果有的话
$cookies cookies, 如果有的话
$rawheaders 其他的头信息, 如果有的话
$maxredirs 最大重定向次数, 0=不允许 (5)
$offsiteok whether or not to allow redirects off-site. (true)
$expandlinks 是否将链接都补全为完整地址 (true)
$user 认证用户名, 如果有的话
$pass 认证用户名, 如果有的话
$accept http 接受类型 (image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*)
$error 哪里报错, 如果有的话
$response_code 从服务器返回的响应代码
$headers 从服务器返回的头信息
$maxlength 最长返回数据长度
$read_timeout 读取操作超时 (requires PHP 4 Beta 4+)
设置为0为没有超时
$timed_out 如果一次读取操作超时了,本属性返回 true (requires PHP 4 Beta 4+)
$maxframes 允许追踪的框架最大数量
$status 抓取的http的状态
$temp_dir 网页服务器能够写入的临时文件目录 (/tmp)
$curl_path cURL binary 的目录, 如果没有cURL binary就设置为 false

以下是demo

帮助

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

include "Snoopy.class.php";

 $snoopy = new Snoopy;

 $snoopy->proxy_host = "http://www.4wei.cn";

 $snoopy->proxy_port = "80";

 $snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)";

 $snoopy->referer = "http://www.4wei.cn";

 $snoopy->cookies["SessionID"] = 238472834723489l;

 $snoopy->cookies["favoriteColor"] = "RED";

 $snoopy->rawheaders["Pragma"] = "no-cache";

 $snoopy->maxredirs = 2;

 $snoopy->offsiteok = false;

 $snoopy->expandlinks = false;

 $snoopy->user = "joe";

 $snoopy->pass = "bloe";

 if($snoopy->fetchtext("http://www.4wei.cn"))

 {

 echo "<PRE>".htmlspecialchars($snoopy->results)."</PRE>\n";

 }

 else

 echo "error fetching document: ".$snoopy->error."\n";

以下是一些代码片段:
1获取指定url内容

帮助

01

02

03

04

05

06

07

08

09

10

11

<?

 $url = "http://www.4wei.cn";

 include("snoopy.php");

 $snoopy = new Snoopy;

 $snoopy->fetch($url); //获取所有内容

 echo $snoopy->results; //显示结果

 //可选以下

 $snoopy->fetchtext //获取文本内容(去掉html代码)

 $snoopy->fetchlinks //获取链接

 $snoopy->fetchform  //获取表单

 ?>

2 表单提交

帮助

01

02

03

04

05

06

07

08

09

10

<?php

$formvars["username"] = "admin";

$formvars["pwd"] = "admin";

$action = "http://www.4wei.cn";//</a>表单提交地址

$snoopy->submit($action,$formvars);//$formvars为提交的数组

echo $snoopy->results; //获取表单提交后的 返回的结果

//可选以下

$snoopy->submittext; //提交后只返回 去除html的 文本

$snoopy->submitlinks;//提交后只返回 链接

?>

既然已经提交的表单 那就可以做很多事情 接下来我们来伪装ip,伪装浏览器

3 伪装

帮助

01

02

03

04

05

06

07

08

09

10

11

12

13

14

<?php

$formvars["username"] = "admin";

$formvars["pwd"] = "admin";

$action = "http://www.4wei.cn";

include "snoopy.php";

$snoopy = new Snoopy;

$snoopy->cookies["PHPSESSID"] = 'fc106b1918bd522cc863f36890e6fff7'; //伪装sessionid

$snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)"; //伪装浏览器

$snoopy->referer = http://www.4wei.cn; //伪装来源页地址 http_referer

$snoopy->rawheaders["Pragma"] = "no-cache"; //cache 的http头信息

$snoopy->rawheaders["X_FORWARDED_FOR"] = "127.0.0.101"; //伪装ip

$snoopy->submit($action,$formvars);

echo $snoopy->results;

?>

原来我们可以伪装session 伪装浏览器 ,伪装ip, haha 可以做很多事情了。
例如 带验证码,验证ip 投票, 可以不停的投。
ps:这里伪装ip ,其实是伪装http头, 所以一般的通过 REMOTE_ADDR 获取的ip是伪装不了,
反而那些通过http头来获取ip的(可以防止代理的那种) 就可以自己来制造ip。
关于如何验证码 ,简单说下:
首先用普通的浏览器, 查看页面 , 找到验证码所对应的sessionid,
同时记下sessionid和验证码值,
接下来就用snoopy去伪造 。
原理:由于是同一个sessionid 所以取得的验证码和第一次输入的是一样的。

4 有时我们可能需要伪造更多的东西,snoopy完全为我们想到了

帮助

01

02

03

04

05

06

07

08

09

10

<?php

$snoopy->proxy_host = "http://www.4wei.cn";

$snoopy->proxy_port = "8080"; //使用代理

$snoopy->maxredirs = 2; //重定向次数

$snoopy->expandlinks = true; //是否补全链接 在采集的时候经常用到

// 例如链接为 /images/taoav.gif 可改为它的全链接 <a href="http://www.4wei.cn/images/taoav.gif">http://www.4wei.cn/images/taoav.gif</a>

$snoopy->maxframes = 5 //允许的最大框架数

//注意抓取框架的时候 $snoopy->results 返回的是一个数组

$snoopy->error //返回报错信息

?>

转载于:https://my.oschina.net/dhyana/blog/877769

snoopy(强大的PHP采集类) 实例应用相关推荐

  1. php snoopy 下载图片,PHP采集类Snoopy抓取图片实例

    这篇文章主要介绍了PHP采集类Snoopy抓取图片实例,Snoopy是一个强大的PHP采集类,可以用来开发一些采集程序和小偷程序,需要的朋友可以参考下. 用了两天php的Snoopy这个类,发现很好用 ...

  2. python format函数实例_python中强大的format函数实例详解

    python中format函数用于字符串的格式化 自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串. 语法 它通过{}和:来代替%. 请看下 ...

  3. snoopy(强大的PHP采集类) 实例应用 1

    Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单. 下载地址: http://sourceforge.net/project/showfiles.php?group_id= ...

  4. snoopy(强大的PHP采集类) 详细介绍

    Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单,可以用来开发一些采集程序和小偷程序,本文章详细介绍snoopy的使用教程. Snoopy的一些特点: 抓取网页的内容 fe ...

  5. 强大的Perl正则表达式实例详解

    一.介绍 正则表达式各语言都有自己的规范,但是基本都差不多,都是由元字符的组合来进行匹配:由于Nmap内嵌的服务与版本探测是使用的Perl正则规范,因此此篇博客记录一下Perl正则的相关内容,方便后期 ...

  6. sed很强大的文本操作命令

    sed对文本的处理很强大,并且sed非常小,参数少,容易掌握,他的操作方式根awk有点像.sed按顺序逐行读取文件.然后,它执行为 该行指定的所有操作,并在完成请求的修改之后的内容显示出来,也可以存放 ...

  7. 独家 | 一文带你上手卷积神经网络实战(附数据集学习资料)

    原文标题:Understanding deep Convolutional Neural Networks with a practical use-case in Tensorflow and Ke ...

  8. 面向对象的三大特征之多态(第三个必要条件)

    ... 必要条件:<1>要有继承 <2>要有重写 <3>父类的应用指向子类的对象(向上转型) 说说第三点吧.难理解. 多态,举个例子吧,例如打印机,它可以有黑白打印 ...

  9. dos下 和 批处理中的 for 语句的基本用法

    原文地址:http://blog.csdn.net/wh_19910525/article/details/7912440 for 语句的基本用法 : 最复杂的for 语句,也有其基本形态,它的模样是 ...

最新文章

  1. JAVA基础——编程练习(一)
  2. alpine 交互sh_在这个免费的交互式教程中学习Alpine JS
  3. Flink1.12 standalone-HA配置(转载+自己验证)
  4. 关于[一个基于WF的业务流程平台]表设计的说明
  5. 【转】Zookeeper 安装和配置
  6. 法定节假日违规组织培训,51talk被通报批评整改不到位
  7. 悉尼大学计算机录取要求,Q 同学_悉尼大学_计算机_录取成功案例分享
  8. Ibatis 动态查询
  9. 网络安全 Python 编程指南
  10. Highcharts 隐藏右下角的官网链接
  11. 给UILabel中的文字加删除线
  12. Chartboost-x新鲜出炉: C++ Wrapper of Chartboost for Cocos2d-x
  13. 国家码信道顺从表(含数据库和配置)
  14. 232串口测试方法介绍
  15. 网络电视视频服务器所放位置,同样带宽,为什么用电视上的网络电视app看电视就卡,用运营商自己的iptv就不卡呢?...
  16. 微软正打造全新 Edge“Phoenix”浏览器?网友:画蛇添足?
  17. C盘爆满上热搜,简单几招释放几十G空间,一下子就不红了
  18. 用VB.NET写的一个简易的RSS阅读器
  19. plt.contour()功用
  20. oracle增加列 reorg,Reorg rebuild 重建表和表上的索引

热门文章

  1. 中国农民丰收节交易会全国贫困地区农产品产销对接行动
  2. “互联网+”非遗谋定市场化-万祥军:经信研究世屹文化
  3. openresty开发系列39--nginx+lua实现接口签名安全认证
  4. Hadoop实例之利用MapReduce实现Wordcount单词统计 (附源代码)
  5. msql 复杂练习
  6. elasticsearch6 学习之安装
  7. python中的 set 中的元素
  8. linkedlist(c语言_简单实现)
  9. ArcGIS Server常见问题集锦(转载)
  10. 丹麦见闻(转自王重合原创)