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

📄 snoopy.class.inc

📁 一个免费的php的blog程序,很好用
💻 INC
📖 第 1 页 / 共 3 页
字号:
				$this->status=-100;				return false;			}							if($currentHeader == "\r\n")				break;									// if a header begins with Location: or URI:, set the redirect			if(preg_match("/^(Location:|URI:)/i",$currentHeader))			{				// get URL portion of the redirect				preg_match("/^(Location:|URI:)\s+(.*)/",chop($currentHeader),$matches);				// look for :// in the Location header to see if hostname is included				if(!preg_match("|\:\/\/|",$matches[2]))				{					// no host in the path, so prepend					$this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port;					// eliminate double slash					if(!preg_match("|^/|",$matches[2]))							$this->_redirectaddr .= "/".$matches[2];					else							$this->_redirectaddr .= $matches[2];				}				else					$this->_redirectaddr = $matches[2];			}					if(preg_match("|^HTTP/|",$currentHeader))			{                if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|",$currentHeader, $status))				{					$this->status= $status[1];                }								$this->response_code = $currentHeader;			}						if (preg_match("/Content-Encoding: gzip/", $currentHeader) ) {				$is_gzipped = true;			}						$this->headers[] = $currentHeader;		}		# $results = fread($fp, $this->maxlength);		$results = "";		while ( $data = fread($fp, $this->maxlength) ) {		    $results .= $data;		    if (		        strlen($results) > $this->maxlength ) {		        break;		    }		}				// gunzip		if ( $is_gzipped ) {			// per http://www.php.net/manual/en/function.gzencode.php			$results = substr($results, 10);			$results = gzinflate($results);		}				if ($this->read_timeout > 0 && $this->_check_timeout($fp))		{			$this->status=-100;			return false;		}				// check if there is a a redirect meta tag				if(preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]+URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match))		{			$this->_redirectaddr = $this->_expandlinks($match[1],$URI);			}		// have we hit our frame depth and is there frame src to fetch?		if(($this->_framedepth < $this->maxframes) && preg_match_all("'<frame\s+.*src[\s]*=[\'\"]?([^\'\"\>]+)'i",$results,$match))		{			$this->results[] = $results;			for($x=0; $x<count($match[1]); $x++)				$this->_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host);		}		// have we already fetched framed content?		elseif(is_array($this->results))			$this->results[] = $results;		// no framed content		else			$this->results = $results;				return true;	}/*======================================================================*\	Function:	_httpsrequest	Purpose:	go get the https data from the server using curl	Input:		$url		the url to fetch				$URI		the full URI				$body		body contents to send if any (POST)	Output:		\*======================================================================*/		function _httpsrequest($url,$URI,$http_method,$content_type="",$body="")	{		if($this->passcookies && $this->_redirectaddr)			$this->setcookies();		$headers = array();									$URI_PARTS = parse_url($URI);		if(empty($url))			$url = "/";		// GET ... header not needed for curl		//$headers[] = $http_method." ".$url." ".$this->_httpversion;				if(!empty($this->agent))			$headers[] = "User-Agent: ".$this->agent;		if(!empty($this->host))			$headers[] = "Host: ".$this->host;		if(!empty($this->accept))			$headers[] = "Accept: ".$this->accept;		if(!empty($this->referer))			$headers[] = "Referer: ".$this->referer;		if(!empty($this->cookies))		{						if(!is_array($this->cookies))				$this->cookies = (array)$this->cookies;				reset($this->cookies);			if ( count($this->cookies) > 0 ) {				$cookie_str = 'Cookie: ';				foreach ( $this->cookies as $cookieKey => $cookieVal ) {				$cookie_str .= $cookieKey."=".urlencode($cookieVal)."; ";				}				$headers[] = substr($cookie_str,0,-2);			}		}		if(!empty($this->rawheaders))		{			if(!is_array($this->rawheaders))				$this->rawheaders = (array)$this->rawheaders;			while(list($headerKey,$headerVal) = each($this->rawheaders))				$headers[] = $headerKey.": ".$headerVal;		}		if(!empty($content_type)) {			if ($content_type == "multipart/form-data")				$headers[] = "Content-type: $content_type; boundary=".$this->_mime_boundary;			else				$headers[] = "Content-type: $content_type";		}		if(!empty($body))				$headers[] = "Content-length: ".strlen($body);		if(!empty($this->user) || !empty($this->pass))				$headers[] = "Authorization: BASIC ".base64_encode($this->user.":".$this->pass);					for($curr_header = 0; $curr_header < count($headers); $curr_header++)			$cmdline_params .= " -H \"".$headers[$curr_header]."\"";				if(!empty($body))			$cmdline_params .= " -d \"$body\"";				if($this->read_timeout > 0)			$cmdline_params .= " -m ".$this->read_timeout;				$headerfile = uniqid(time());		exec($this->curl_path." -D \"/tmp/$headerfile\"".$cmdline_params." ".$URI,$results,$return);				if($return)		{			$this->error = "Error: cURL could not retrieve the document, error $return.";			return false;		}								$results = implode("\r\n",$results);				$result_headers = file("/tmp/$headerfile");								$this->_redirectaddr = false;		unset($this->headers);								for($currentHeader = 0; $currentHeader < count($result_headers); $currentHeader++)		{						// if a header begins with Location: or URI:, set the redirect			if(preg_match("/^(Location: |URI: )/i",$result_headers[$currentHeader]))			{				// get URL portion of the redirect				preg_match("/^(Location: |URI:)(.*)/",chop($result_headers[$currentHeader]),$matches);				// look for :// in the Location header to see if hostname is included				if(!preg_match("|\:\/\/|",$matches[2]))				{					// no host in the path, so prepend					$this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port;					// eliminate double slash					if(!preg_match("|^/|",$matches[2]))							$this->_redirectaddr .= "/".$matches[2];					else							$this->_redirectaddr .= $matches[2];				}				else					$this->_redirectaddr = $matches[2];			}					if(preg_match("|^HTTP/|",$result_headers[$currentHeader]))				$this->response_code = $result_headers[$currentHeader];			$this->headers[] = $result_headers[$currentHeader];		}		// check if there is a a redirect meta tag				if(preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]+URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match))		{			$this->_redirectaddr = $this->_expandlinks($match[1],$URI);			}		// have we hit our frame depth and is there frame src to fetch?		if(($this->_framedepth < $this->maxframes) && preg_match_all("'<frame\s+.*src[\s]*=[\'\"]?([^\'\"\>]+)'i",$results,$match))		{			$this->results[] = $results;			for($x=0; $x<count($match[1]); $x++)				$this->_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host);		}		// have we already fetched framed content?		elseif(is_array($this->results))			$this->results[] = $results;		// no framed content		else			$this->results = $results;		unlink("/tmp/$headerfile");				return true;	}/*======================================================================*\	Function:	setcookies()	Purpose:	set cookies for a redirection\*======================================================================*/		function setcookies()	{		for($x=0; $x<count($this->headers); $x++)		{		if(preg_match("/^set-cookie:[\s]+([^=]+)=([^;]+)/i", $this->headers[$x],$match))			$this->cookies[$match[1]] = $match[2];		}	}	/*======================================================================*\	Function:	_check_timeout	Purpose:	checks whether timeout has occurred	Input:		$fp	file pointer\*======================================================================*/	function _check_timeout($fp)	{		if ($this->read_timeout > 0) {			$fp_status = socket_get_status($fp);			if ($fp_status["timed_out"]) {				$this->timed_out = true;				return true;			}		}		return false;	}/*======================================================================*\	Function:	_connect	Purpose:	make a socket connection	Input:		$fp	file pointer\*======================================================================*/		function _connect(&$fp)	{		if(!empty($this->proxy_host) && !empty($this->proxy_port))			{				$this->_isproxy = true;				$host = $this->proxy_host;				$port = $this->proxy_port;			}		else		{			$host = $this->host;			$port = $this->port;		}			$this->status = 0;				if($fp = fsockopen(					$host,					$port,					$errno,					$errstr,					$this->_fp_timeout					))		{			// socket connection succeeded			return true;		}		else		{			// socket connection failed			$this->status = $errno;			switch($errno)			{				case -3:					$this->error="socket creation failed (-3)";				case -4:					$this->error="dns lookup failure (-4)";				case -5:					$this->error="connection refused or timed out (-5)";				default:					$this->error="connection failed (".$errno.")";			}			return false;		}	}/*======================================================================*\	Function:	_disconnect	Purpose:	disconnect a socket connection	Input:		$fp	file pointer\*======================================================================*/		function _disconnect($fp)	{		return(fclose($fp));	}	/*======================================================================*\	Function:	_prepare_post_body	Purpose:	Prepare post body according to encoding type	Input:		$formvars  - form variables				$formfiles - form upload files	Output:		post body\*======================================================================*/		function _prepare_post_body($formvars, $formfiles)	{		settype($formvars, "array");		settype($formfiles, "array");		if (count($formvars) == 0 && count($formfiles) == 0)			return;				switch ($this->_submit_type) {			case "application/x-www-form-urlencoded":				reset($formvars);				while(list($key,$val) = each($formvars)) {					if (is_array($val) || is_object($val)) {						while (list($cur_key, $cur_val) = each($val)) {							$postdata .= urlencode($key)."[]=".urlencode($cur_val)."&";						}					} else						$postdata .= urlencode($key)."=".urlencode($val)."&";				}				break;			case "multipart/form-data":				$this->_mime_boundary = "Snoopy".md5(uniqid(microtime()));								reset($formvars);				while(list($key,$val) = each($formvars)) {					if (is_array($val) || is_object($val)) {						while (list($cur_key, $cur_val) = each($val)) {							$postdata .= "--".$this->_mime_boundary."\r\n";							$postdata .= "Content-Disposition: form-data; name=\"$key\[\]\"\r\n\r\n";							$postdata .= "$cur_val\r\n";						}					} else {						$postdata .= "--".$this->_mime_boundary."\r\n";						$postdata .= "Content-Disposition: form-data; name=\"$key\"\r\n\r\n";						$postdata .= "$val\r\n";					}				}								reset($formfiles);				while (list($field_name, $file_names) = each($formfiles)) {					settype($file_names, "array");					while (list(, $file_name) = each($file_names)) {						if (!is_readable($file_name)) continue;						$fp = fopen($file_name, "r");						$file_content = fread($fp, filesize($file_name));						fclose($fp);						$base_name = basename($file_name);						$postdata .= "--".$this->_mime_boundary."\r\n";						$postdata .= "Content-Disposition: form-data; name=\"$field_name\"; filename=\"$base_name\"\r\n\r\n";						$postdata .= "$file_content\r\n";					}				}				$postdata .= "--".$this->_mime_boundary."--\r\n";				break;		}		return $postdata;	}}?>

⌨️ 快捷键说明

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