Snoopy.class.php 是一个关于HTTP协议访问操作的类库,主要是使用在 MagpieRSS 中用于远程文件的抓取,我原来转载的一篇文章大致有简单的介绍这个东西,今天无聊,把代码帖出来,大家参考学习。
<?php
/*************************************************
Snoopy-thePHPnetclient
Author:MonteOhrt<monte@ispi.net>
Copyright(c):1999-2000ispi,allrightsreserved
Version:1.01
*Thislibraryisfreesoftware;youcanredistributeitand/or
*modifyitunderthetermsoftheGNULesserGeneralPublic
*LicenseaspublishedbytheFreeSoftwareFoundation;either
*version2.1oftheLicense,or(atyouroption)anylaterversion.
*
*Thislibraryisdistributedinthehopethatitwillbeuseful,
*butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof
*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.SeetheGNU
*LesserGeneralPublicLicenseformoredetails.
*
*YoushouldhavereceivedacopyoftheGNULesserGeneralPublic
*Licensealongwiththislibrary;ifnot,writetotheFreeSoftware
*Foundation,Inc.,59TemplePlace,Suite330,Boston,MA02111-1307USA
YoumaycontacttheauthorofSnoopybye-mailat:
monte@ispi.net
Or,writeto:
MonteOhrt
CTO,ispi
237S.70thsuite220
Lincoln,NE68510
ThelatestversionofSnoopycanbeobtainedfrom:
http://snoopy.sourceforge.net/
*************************************************/
classSnoopy
{
/****Publicvariables****/
/*userdefinablevars*/
var$host="www.php.net";//hostnameweareconnectingto
var$port=80;//portweareconnectingto
var$proxy_host="";//proxyhosttouse
var$proxy_port="";//proxyporttouse
var$proxy_user="";//proxyusertouse
var$proxy_pass="";//proxypasswordtouse
var$agent="Snoopyv1.2.3";//agentwemasqueradeas
var$referer="";//refererinfotopass
var$cookies=array();//arrayofcookiestopass
//$cookies["username"]="joe";
var$rawheaders=array();//arrayofrawheaderstosend
//$rawheaders["Content-type"]="text/html";
var$maxredirs=5;//httpredirectiondepthmaximum.0=disallow
var$lastredirectaddr="";//containsaddressoflastredirectedaddress
var$offsiteok=true;//allowsredirectionoff-site
var$maxframes=0;//framecontentdepthmaximum.0=disallow
var$expandlinks=true;//expandlinkstofullyqualifiedURLs.
//thisonlyappliestofetchlinks()
//submitlinks(),andsubmittext()
var$passcookies=true;//passsetcookiesbackthroughredirects
//NOTE:thiscurrentlydoesnotrespect
//dates,domainsorpaths.
var$user="";//userforhttpauthentication
var$pass="";//passwordforhttpauthentication
//httpaccepttypes
var$accept="image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*";
var$results="";//wherethecontentisput
var$error="";//errormessagessenthere
var$response_code="";//responsecodereturnedfromserver
var$headers=array();//headersreturnedfromserversenthere
var$maxlength=500000;//maxreturndatalength(body)
var$read_timeout=0;//timeoutonreadoperations,inseconds
//supportedonlysincePHP4Beta4
//setto0todisallowtimeouts
var$timed_out=false;//ifareadoperationtimedout
var$status=0;//httprequeststatus
var$temp_dir="/tmp";//temporarydirectorythatthewebserver
//haspermissiontowriteto.
//underWindows,thisshouldbeC: emp
var$curl_path="/usr/local/bin/curl";
//SnoopywillusecURLforfetching
//SSLcontentifafullsystempathto
//thecURLbinaryissuppliedhere.
//settofalseifyoudonothave
//cURLinstalled.Seehttp://curl.haxx.se
//fordetailsoninstallingcURL.
//Snoopydoes*not*usethecURL
//libraryfunctionsbuiltintophp,
//asthesefunctionsarenotstable
//asofthisSnoopyrelease.
/****Privatevariables****/
var$_maxlinelen=4096;//maxlinelength(headers)
var$_httpmethod="GET";//defaulthttprequestmethod
var$_httpversion="HTTP/1.0";//defaulthttprequestversion
var$_submit_method="POST";//defaultsubmitmethod
var$_submit_type="application/x-www-form-urlencoded";//defaultsubmittype
var$_mime_boundary="";//MIMEboundaryformultipart/form-datasubmittype
var$_redirectaddr=false;//willbesetifpagefetchedisaredirect
var$_redirectdepth=0;//incrementsonanhttpredirect
var$_frameurls=array();//framesrcurls
var$_framedepth=0;//incrementsonframedepth
var$_isproxy=false;//setifusingaproxyserver
var$_fp_timeout=30;//timeoutforsocketconnection
/*======================================================================*
Function:fetch
Purpose:fetchthecontentsofawebpage
(andpossiblyotherprotocolsinthe
futurelikeftp,nntp,gopher,etc.)
Input:$URIthelocationofthepagetofetch
Output:$this->resultstheoutputtextfromthefetch
*======================================================================*/
functionfetch($URI)
{
//preg_match("|^([^:]+)://([^:/]+)(:[d]+)*(.*)|",$URI,$URI_PARTS);
$URI_PARTS=parse_url($URI);
if(!empty($URI_PARTS["user"]))
$this->user=$URI_PARTS["user"];
if(!empty($URI_PARTS["pass"]))
$this->pass=$URI_PARTS["pass"];
if(empty($URI_PARTS["query"]))
$URI_PARTS["query"]='';
if(empty($URI_PARTS["path"]))
$URI_PARTS["path"]='';
switch(strtolower($URI_PARTS["scheme"]))
{
case"http":
$this->host=$URI_PARTS["host"];
if(!empty($URI_PARTS["port"]))
$this->port=$URI_PARTS["port"];
if($this->_connect($fp))
{
if($this->_isproxy)
{
//usingproxy,sendentireURI
$this->_httprequest($URI,$fp,$URI,$this->_httpmethod);
}
else
{
$path=$URI_PARTS["path"].($URI_PARTS["query"]?"?".$URI_PARTS["query"]:"");
//noproxy,sendonlythepath
$this->_httprequest($path,$fp,$URI,$this->_httpmethod);
}
$this->_disconnect($fp);
if($this->_redirectaddr)
{
/*urlwasredirected,checkifwe'vehitthemaxdepth*/
if($this->maxredirs>$this->_redirectdepth)
{
//onlyfollowredirectifit'sonthissite,oroffsiteokistrue
if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr)||$this->offsiteok)
{
/*followtheredirect*/
$this->_redirectdepth++;
$this->lastredirectaddr=$this->_redirectaddr;
$this->fetch($this->_redirectaddr);
}
}
}
if($this->_framedepth<$this->maxframes&&count($this->_frameurls)>0)
{
$frameurls=$this->_frameurls;
$this->_frameurls=array();
while(list(,$frameurl)=each($frameurls))
{
if($this->_framedepth<$this->maxframes)
{
$this->fetch($frameurl);
$this->_framedepth++;
}
else
break;
}
}
}
else
{
returnfalse;
}
returntrue;
break;
case"https":
if(!$this->curl_path)
returnfalse;
if(function_exists("is_executable"))
if(!is_executable($this->curl_path))
returnfalse;
$this->host=$URI_PARTS["host"];
if(!empty($URI_PARTS["port"]))
$this->port=$URI_PARTS["port"];
if($this->_isproxy)
{
//usingproxy,sendentireURI
$this->_httpsrequest($URI,$URI,$this->_httpmethod);
}
else
{
$path=$URI_PARTS["path"].($URI_PARTS["query"]?"?".$URI_PARTS["query"]:"");
//noproxy,sendonlythepath
$this->_httpsrequest($path,$URI,$this->_httpmethod);
}
if($this->_redirectaddr)
{
/*urlwasredirected,checkifwe'vehitthemaxdepth*/
if($this->maxredirs>$this->_redirectdepth)
{
//onlyfollowredirectifit'sonthissite,oroffsiteokistrue
if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr)||$this->offsiteok)
{
/*followtheredirect*/
$this->_redirectdepth++;
$this->lastredirectaddr=$this->_redirectaddr;
$this->fetch($this->_redirectaddr);
}
}
}
if($this->_framedepth<$this->maxframes&&count($this->_frameurls)>0)
{
$frameurls=$this->_frameurls;
$this->_frameurls=array();
while(list(,$frameurl)=each($frameurls))
{
if($this->_framedepth<$this->maxframes)
{
$this->fetch($frameurl);
$this->_framedepth++;
}
else
break;
}
}
returntrue;
break;
default:
//notavalidprotocol
$this->error='Invalidprotocol"'.$URI_PARTS["scheme"].'" ';
returnfalse;
break;
}
returntrue;
}
/*======================================================================*
Function:submit
Purpose:submitanhttpform
Input:$URIthelocationtopostthedata
$formvarstheformvarstouse.
format:$formvars["var"]="val";
$formfilesanarrayoffilestosubmit
format:$formfiles["var"]="/dir/filename.ext";
Output:$this->resultsthetextoutputfromthepost
*======================================================================*/
functionsubmit($URI,$formvars="",$formfiles="")
{
unset($postdata);
$postdata=$this->_prepare_post_body($formvars,$formfiles);
$URI_PARTS=parse_url($URI);
if(!empty($URI_PARTS["user"]))
$this->user=$URI_PARTS["user"];
if(!empty($URI_PARTS["pass"]))
$this->pass=$URI_PARTS["pass"];
if(empty($URI_PARTS["query"]))
$URI_PARTS["query"]='';
if(empty($URI_PARTS["path"]))
$URI_PARTS["path"]='';
switch(strtolower($URI_PARTS["scheme"]))
{
case"http":
$this->host=$URI_PARTS["host"];
if(!empty($URI_PARTS["port"]))
$this->port=$URI_PARTS["port"];
if($this->_connect($fp))
{
if($this->_isproxy)
{
//usingproxy,sendentireURI
$this->_httprequest($URI,$fp,$URI,$this->_submit_method,$this->_submit_type,$postdata);
}
else
{
$path=$URI_PARTS["path"].($URI_PARTS["query"]?"?".$URI_PARTS["query"]:"");
//noproxy,sendonlythepath<b
分享到:
相关推荐
Snoopy.class.php 是一个广泛使用的PHP类库,主要用于实现HTTP客户端的功能,它允许开发者模拟浏览器行为,发送HTTP请求,并获取服务器的响应。这个库在处理网页抓取、数据采集和自动化测试等任务时非常有用。 ...
标题中的"Snoopy.class.rar_Snoopy.class.php"暗示了这是一个与PHP相关的压缩包,包含了一个名为"Snoopy.class.php"的文件。Snoopy在PHP世界中通常指的是一个网络爬虫类库,用于模拟HTTP请求,抓取网页数据。这个...
Snoopy 是一个非常强大的PHP类,下面是详细介绍Snoopy.class.php源文件的内容。希望对大家有所帮助 Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单。 Snoopy的一些特点: 1抓取网页的内容 ...
$snoopyx = new Snoopy ; $snoopyx->fetch($furl) ; if($snoopyx->results !="") { $handle = fopen($filename, 'w') ; fwrite($handle, $snoopyx->results) ; //把抓取得内容写到 临时文件中 fclose($...
Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单。使用Snoopy来模拟登陆,然后采集登陆后的页面非常管用! Snoopy的特点: 1、抓取网页的内容 fetch 2、抓取网页的文本内容 (去除HTML标签) ...
94.纯色史努比Snoopy.docx
93.彩色史努比Snoopy.docx
标题"Snoopy.rar_The Client"暗示我们关注的是一个与客户端相关的PHP库,可能是用于网络通信的。描述中提到"Snoopy"是一个PHP的网络客户端,它利用了cURL库来实现远程调用功能。cURL是PHP中广泛使用的库,用于在...
Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单。Snoopy正确运行需要你的服务器的PHP版本在4以上,并且支持PCRE(Perl Compatible Regular Expressions),基本的LAMP服务都支持。
本篇文章将详细讲解如何使用PHP实现这个功能,并着重介绍Snoopy.class.php类的使用。 首先,让我们了解基本的PHP下载远程文件的方法。通过`file_get_contents`函数,我们可以直接读取并保存远程URL的内容。例如,...
1. **安装**:通常,只需将Snoopy类的源代码文件(如snoopy.class.php)包含到项目中即可使用。 2. **初始化**:创建Snoopy对象,然后设置任何必要的配置,如代理服务器、超时时间等。 3. **发起请求**:调用fetch()...
Snoopy.class.php,实现网页下载, 网页采集类,Snoopy的一些功能特点: 抓取网页的内容 fetch() 抓取网页的文本内容 (去除HTML标签) fetchtext() 抓取网页的链接,表单 fetchlinks() fetchform() 支持代理...
Snoopy是一个用来模拟浏览器的一些简单功能的php类,可以获取网页内容,发送表单等操作,Snoopy正确运行需要你的服务器的PHP版本在4以上,并且支持PCRE(Perl Compatible Regular Expressions),基本的LAMP服务都支持,由于...
在提供的压缩包文件中,snoopy.class.php是Snoopy类的实现文件,包含了所有必要的方法和属性。 1. **初始化Snoopy对象** 在使用Snoopy之前,首先需要实例化一个Snoopy对象: ```php require_once 'snoopy.class....
Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单,可以用来开发一些采集程序和小偷程序,本文章详细介绍snoopy的使用教程。 Snoopy的一些特点: 抓取网页的内容 fetch 抓取网页的文本内容 ...
《网络封包编辑器WPE详解及其应用》 在信息技术高速发展的今天,网络封包编辑器作为网络安全与软件开发中的重要工具,起着至关重要的作用。本文将详细讲解一款名为WPE(Winsock Packet Editor)的专业工具,以及其...
Snoopy是一个用来模拟浏览器的一些简单功能的php类,可以获取网页内容,发送表单等操作,Snoopy正确运行需要你的服务器的PHP版本在4以上,并且支持PCRE(Perl Compatible ...需要的朋友可以参考下,方便大家学习php的代码。
在`Snoopy.class.php`文件中,包含了Snoopy类的所有功能,包括初始化、设置URL、发送请求、接收响应等功能。 在"ems.php"文件中,通常会包含使用Snoopy进行EMS网站请求的代码。首先,我们需要实例化Snoopy对象,...