⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snoopy.class.inc

📁 一个免费的php的blog程序,很好用
💻 INC
📖 第 1 页 / 共 3 页
字号:
<?php/*************************************************Snoopy - the PHP net clientAuthor: Monte Ohrt <monte@ispi.net>Copyright (c): 1999-2000 ispi, all rights reservedVersion: 1.0 * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USAYou may contact the author of Snoopy by e-mail at:monte@ispi.netOr, write to:Monte OhrtCTO, ispi237 S. 70th suite 220Lincoln, NE 68510The latest version of Snoopy can be obtained from:http://snoopy.sourceforge.com*************************************************/class Snoopy{	/**** Public variables ****/		/* user definable vars */	var $host			=	"www.php.net";		// host name we are connecting to	var $port			=	80;					// port we are connecting to	var $proxy_host		=	"";					// proxy host to use	var $proxy_port		=	"";					// proxy port to use	var $agent			=	"Snoopy v1.0";		// agent we masquerade as	var	$referer		=	"";					// referer info to pass	var $cookies		=	array();			// array of cookies to pass												// $cookies["username"]="joe";	var	$rawheaders		=	array();			// array of raw headers to send												// $rawheaders["Content-type"]="text/html";	var $maxredirs		=	5;					// http redirection depth maximum. 0 = disallow	var $lastredirectaddr	=	"";				// contains address of last redirected address	var	$offsiteok		=	true;				// allows redirection off-site	var $maxframes		=	0;					// frame content depth maximum. 0 = disallow	var $expandlinks	=	true;				// expand links to fully qualified URLs.												// this only applies to fetchlinks()												// or submitlinks()	var $passcookies	=	true;				// pass set cookies back through redirects												// NOTE: this currently does not respect												// dates, domains or paths.		var	$user			=	"";					// user for http authentication	var	$pass			=	"";					// password for http authentication		// http accept types	var $accept			=	"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*";		var $results		=	"";					// where the content is put			var $error			=	"";					// error messages sent here	var	$response_code	=	"";					// response code returned from server	var	$headers		=	array();			// headers returned from server sent here	var	$maxlength		=	500000;				// max return data length (body)	var $read_timeout	=	0;					// timeout on read operations, in seconds												// supported only since PHP 4 Beta 4												// set to 0 to disallow timeouts	var $timed_out		=	false;				// if a read operation timed out	var	$status			=	0;					// http request status		var	$curl_path		=	"/usr/local/bin/curl";												// Snoopy will use cURL for fetching												// SSL content if a full system path to												// the cURL binary is supplied here.												// set to false if you do not have												// cURL installed. See http://curl.haxx.se												// for details on installing cURL.												// Snoopy does *not* use the cURL												// library functions built into php,												// as these functions are not stable												// as of this Snoopy release.		// send Accept-encoding: gzip?	var $use_gzip		= true;			/**** Private variables ****/			var	$_maxlinelen	=	4096;				// max line length (headers)		var $_httpmethod	=	"GET";				// default http request method	var $_httpversion	=	"HTTP/1.0";			// default http request version	var $_submit_method	=	"POST";				// default submit method	var $_submit_type	=	"application/x-www-form-urlencoded";	// default submit type	var $_mime_boundary	=   "";					// MIME boundary for multipart/form-data submit type	var $_redirectaddr	=	false;				// will be set if page fetched is a redirect	var $_redirectdepth	=	0;					// increments on an http redirect	var $_frameurls		= 	array();			// frame src urls	var $_framedepth	=	0;					// increments on frame depth		var $_isproxy		=	false;				// set if using a proxy server	var $_fp_timeout	=	30;					// timeout for socket connection/*======================================================================*\	Function:	fetch	Purpose:	fetch the contents of a web page				(and possibly other protocols in the				future like ftp, nntp, gopher, etc.)	Input:		$URI	the location of the page to fetch	Output:		$this->results	the output text from the fetch\*======================================================================*/	function fetch($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"];						switch($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)					{						// using proxy, send entire URI						$this->_httprequest($URI,$fp,$URI,$this->_httpmethod);					}					else					{						$path = $URI_PARTS["path"].(isset($URI_PARTS["query"]) ? "?".$URI_PARTS["query"] : "");						// no proxy, send only the path						$this->_httprequest($path, $fp, $URI, $this->_httpmethod);					}										$this->_disconnect($fp);					if($this->_redirectaddr)					{						/* url was redirected, check if we've hit the max depth */						if($this->maxredirs > $this->_redirectdepth)						{							// only follow redirect if it's on this site, or offsiteok is true							if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok)							{								/* follow the redirect */								$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				{					return false;				}				return true;									break;			case "https":				if(!$this->curl_path || (!is_executable($this->curl_path)))					return false;				$this->host = $URI_PARTS["host"];				if(!empty($URI_PARTS["port"]))					$this->port = $URI_PARTS["port"];				if($this->_isproxy)				{					// using proxy, send entire URI					$this->_httpsrequest($URI,$URI,$this->_httpmethod);				}				else				{					$path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : "");					// no proxy, send only the path					$this->_httpsrequest($path, $URI, $this->_httpmethod);				}				if($this->_redirectaddr)				{					/* url was redirected, check if we've hit the max depth */					if($this->maxredirs > $this->_redirectdepth)					{						// only follow redirect if it's on this site, or offsiteok is true						if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok)						{							/* follow the redirect */							$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;					}				}									return true;									break;			default:				// not a valid protocol				$this->error	=	'Invalid protocol "'.$URI_PARTS["scheme"].'"\n';				return false;				break;		}				return true;	}/*======================================================================*\	Function:	submit	Purpose:	submit an http form	Input:		$URI	the location to post the data				$formvars	the formvars to use.					format: $formvars["var"] = "val";	Output:		$this->results	the text output from the post\*======================================================================*/	function submit($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"];						switch($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)					{						// using proxy, send entire URI						$this->_httprequest($URI,$fp,$URI,$this->_submit_method,$this->_submit_type,$postdata);					}					else					{						$path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : "");						// no proxy, send only the path						$this->_httprequest($path, $fp, $URI, $this->_submit_method, $this->_submit_type, $postdata);					}										$this->_disconnect($fp);					if($this->_redirectaddr)					{						/* url was redirected, check if we've hit the max depth */						if($this->maxredirs > $this->_redirectdepth)						{													if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr))								$this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]);																				// only follow redirect if it's on this site, or offsiteok is true							if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok)							{								/* follow the redirect */								$this->_redirectdepth++;								$this->lastredirectaddr=$this->_redirectaddr;								$this->submit($this->_redirectaddr,$formvars, $formfiles);							}						}					}					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				{					return false;				}				return true;									break;			case "https":				if(!$this->curl_path || (!is_executable($this->curl_path)))					return false;				$this->host = $URI_PARTS["host"];				if(!empty($URI_PARTS["port"]))					$this->port = $URI_PARTS["port"];				if($this->_isproxy)				{					// using proxy, send entire URI					$this->_httpsrequest($URI, $URI, $this->_submit_method, $this->_submit_type, $postdata);				}				else				{					$path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : "");					// no proxy, send only the path					$this->_httpsrequest($path, $URI, $this->_submit_method, $this->_submit_type, $postdata);				}				if($this->_redirectaddr)				{					/* url was redirected, check if we've hit the max depth */					if($this->maxredirs > $this->_redirectdepth)					{												if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr))							$this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]);												// only follow redirect if it's on this site, or offsiteok is true						if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok)						{							/* follow the redirect */							$this->_redirectdepth++;							$this->lastredirectaddr=$this->_redirectaddr;							$this->submit($this->_redirectaddr,$formvars, $formfiles);						}					}				}				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;					}				}									return true;									break;							default:				// not a valid protocol				$this->error	=	'Invalid protocol "'.$URI_PARTS["scheme"].'"\n';				return false;				break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -