[geeklog-cvs] Geeklog-1.x/plugins/spamx/magpierss/extlib Snoopy.class.inc, 1.3, 1.3.2.1

Dirk Haun dhaun at qs1489.pair.com
Tue Jun 5 16:22:09 EDT 2007


Update of /cvsroot/geeklog/Geeklog-1.x/plugins/spamx/magpierss/extlib
In directory qs1489.pair.com:/tmp/cvs-serv38871/plugins/spamx/magpierss/extlib

Modified Files:
      Tag: geeklog_1_4_1_1
	Snoopy.class.inc 
Log Message:
Copied the updated Snoopy class over from the trunk


Index: Snoopy.class.inc
===================================================================
RCS file: /cvsroot/geeklog/Geeklog-1.x/plugins/spamx/magpierss/extlib/Snoopy.class.inc,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -C2 -d -r1.3 -r1.3.2.1
*** Snoopy.class.inc	25 Jun 2006 08:15:43 -0000	1.3
--- Snoopy.class.inc	5 Jun 2007 20:22:07 -0000	1.3.2.1
***************
*** 6,10 ****
  Author: Monte Ohrt <monte at ispi.net>
  Copyright (c): 1999-2000 ispi, all rights reserved
! Version: 1.0
  
   * This library is free software; you can redistribute it and/or
--- 6,10 ----
  Author: Monte Ohrt <monte at ispi.net>
  Copyright (c): 1999-2000 ispi, all rights reserved
! Version: 1.01
  
   * This library is free software; you can redistribute it and/or
***************
*** 32,36 ****
  
  The latest version of Snoopy can be obtained from:
! http://snoopy.sourceforge.com
  
  *************************************************/
--- 32,36 ----
  
  The latest version of Snoopy can be obtained from:
! http://snoopy.sourceforge.net/
  
  *************************************************/
***************
*** 46,50 ****
  	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
--- 46,53 ----
  	var $proxy_host		=	"";					// proxy host to use
  	var $proxy_port		=	"";					// proxy port to use
! 	var $proxy_user		=	"";					// proxy user to use
! 	var $proxy_pass		=	"";					// proxy password to use
! 	
! 	var $agent			=	"Snoopy v1.2.3";	// agent we masquerade as
  	var	$referer		=	"";					// referer info to pass
  	var $cookies		=	array();			// array of cookies to pass
***************
*** 59,63 ****
  	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
--- 62,66 ----
  	var $expandlinks	=	true;				// expand links to fully qualified URLs.
  												// this only applies to fetchlinks()
! 												// submitlinks(), and submittext()
  	var $passcookies	=	true;				// pass set cookies back through redirects
  												// NOTE: this currently does not respect
***************
*** 81,86 ****
  	var $timed_out		=	false;				// if a read operation timed out
  	var	$status			=	0;					// http request status
! 	
! 	var	$curl_path		=	"/usr/bin/curl";
  												// Snoopy will use cURL for fetching
  												// SSL content if a full system path to
--- 84,93 ----
  	var $timed_out		=	false;				// if a read operation timed out
  	var	$status			=	0;					// http request status
! 
! 	var $temp_dir		=	"/tmp";				// temporary directory that the webserver
! 												// has permission to write to.
! 												// under Windows, this should be C:\temp
! 
! 	var	$curl_path		=	"/usr/local/bin/curl";
  												// Snoopy will use cURL for fetching
  												// SSL content if a full system path to
***************
*** 94,100 ****
  												// as of this Snoopy release.
  	
- 	// send Accept-encoding: gzip?
- 	var $use_gzip		= true;	
- 	
  	/**** Private variables ****/	
  	
--- 101,104 ----
***************
*** 132,137 ****
  		if (!empty($URI_PARTS["pass"]))
  			$this->pass = $URI_PARTS["pass"];
  				
! 		switch($URI_PARTS["scheme"])
  		{
  			case "http":
--- 136,145 ----
  		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":
***************
*** 148,152 ****
  					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);
--- 156,160 ----
  					else
  					{
! 						$path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : "");
  						// no proxy, send only the path
  						$this->_httprequest($path, $fp, $URI, $this->_httpmethod);
***************
*** 195,202 ****
  				break;
  			case "https":
! 				if(!$this->curl_path || (!is_executable($this->curl_path))) {
! 					$this->error = "Bad curl ($this->curl_path), can't fetch HTTPS \n";
  					return false;
! 				}
  				$this->host = $URI_PARTS["host"];
  				if(!empty($URI_PARTS["port"]))
--- 203,211 ----
  				break;
  			case "https":
! 				if(!$this->curl_path)
  					return false;
! 				if(function_exists("is_executable"))
! 				    if (!is_executable($this->curl_path))
! 				        return false;
  				$this->host = $URI_PARTS["host"];
  				if(!empty($URI_PARTS["port"]))
***************
*** 257,261 ****
--- 266,609 ----
  	}
  
+ /*======================================================================*\
+ 	Function:	submit
+ 	Purpose:	submit an http form
+ 	Input:		$URI	the location to post the data
+ 				$formvars	the formvars to use.
+ 					format: $formvars["var"] = "val";
+ 				$formfiles  an array of files to submit
+ 					format: $formfiles["var"] = "/dir/filename.ext";
+ 	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"];
+ 		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)
+ 					{
+ 						// 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;
+ 								if( strpos( $this->_redirectaddr, "?" ) > 0 )
+ 									$this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get
+ 								else
+ 									$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)
+ 					return false;
+ 				if(function_exists("is_executable"))
+ 				    if (!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;
+ 							if( strpos( $this->_redirectaddr, "?" ) > 0 )
+ 								$this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get
+ 							else
+ 								$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;
+ 		}		
+ 		return true;
+ 	}
+ 
+ /*======================================================================*\
+ 	Function:	fetchlinks
+ 	Purpose:	fetch the links from a web page
+ 	Input:		$URI	where you are fetching from
+ 	Output:		$this->results	an array of the URLs
+ \*======================================================================*/
+ 
+ 	function fetchlinks($URI)
+ 	{
+ 		if ($this->fetch($URI))
+ 		{			
+ 			if($this->lastredirectaddr)
+ 				$URI = $this->lastredirectaddr;
+ 			if(is_array($this->results))
+ 			{
+ 				for($x=0;$x<count($this->results);$x++)
+ 					$this->results[$x] = $this->_striplinks($this->results[$x]);
+ 			}
+ 			else
+ 				$this->results = $this->_striplinks($this->results);
+ 
+ 			if($this->expandlinks)
+ 				$this->results = $this->_expandlinks($this->results, $URI);
+ 			return true;
+ 		}
+ 		else
+ 			return false;
+ 	}
+ 
+ /*======================================================================*\
+ 	Function:	fetchform
+ 	Purpose:	fetch the form elements from a web page
+ 	Input:		$URI	where you are fetching from
+ 	Output:		$this->results	the resulting html form
+ \*======================================================================*/
  
+ 	function fetchform($URI)
+ 	{
+ 		
+ 		if ($this->fetch($URI))
+ 		{			
+ 
+ 			if(is_array($this->results))
+ 			{
+ 				for($x=0;$x<count($this->results);$x++)
+ 					$this->results[$x] = $this->_stripform($this->results[$x]);
+ 			}
+ 			else
+ 				$this->results = $this->_stripform($this->results);
+ 			
+ 			return true;
+ 		}
+ 		else
+ 			return false;
+ 	}
+ 	
+ 	
+ /*======================================================================*\
+ 	Function:	fetchtext
+ 	Purpose:	fetch the text from a web page, stripping the links
+ 	Input:		$URI	where you are fetching from
+ 	Output:		$this->results	the text from the web page
+ \*======================================================================*/
+ 
+ 	function fetchtext($URI)
+ 	{
+ 		if($this->fetch($URI))
+ 		{			
+ 			if(is_array($this->results))
+ 			{
+ 				for($x=0;$x<count($this->results);$x++)
+ 					$this->results[$x] = $this->_striptext($this->results[$x]);
+ 			}
+ 			else
+ 				$this->results = $this->_striptext($this->results);
+ 			return true;
+ 		}
+ 		else
+ 			return false;
+ 	}
+ 
+ /*======================================================================*\
+ 	Function:	submitlinks
+ 	Purpose:	grab links from a form submission
+ 	Input:		$URI	where you are submitting from
+ 	Output:		$this->results	an array of the links from the post
+ \*======================================================================*/
+ 
+ 	function submitlinks($URI, $formvars="", $formfiles="")
+ 	{
+ 		if($this->submit($URI,$formvars, $formfiles))
+ 		{			
+ 			if($this->lastredirectaddr)
+ 				$URI = $this->lastredirectaddr;
+ 			if(is_array($this->results))
+ 			{
+ 				for($x=0;$x<count($this->results);$x++)
+ 				{
+ 					$this->results[$x] = $this->_striplinks($this->results[$x]);
+ 					if($this->expandlinks)
+ 						$this->results[$x] = $this->_expandlinks($this->results[$x],$URI);
+ 				}
+ 			}
+ 			else
+ 			{
+ 				$this->results = $this->_striplinks($this->results);
+ 				if($this->expandlinks)
+ 					$this->results = $this->_expandlinks($this->results,$URI);
+ 			}
+ 			return true;
+ 		}
+ 		else
+ 			return false;
+ 	}
+ 
+ /*======================================================================*\
+ 	Function:	submittext
+ 	Purpose:	grab text from a form submission
+ 	Input:		$URI	where you are submitting from
+ 	Output:		$this->results	the text from the web page
+ \*======================================================================*/
+ 
+ 	function submittext($URI, $formvars = "", $formfiles = "")
+ 	{
+ 		if($this->submit($URI,$formvars, $formfiles))
+ 		{			
+ 			if($this->lastredirectaddr)
+ 				$URI = $this->lastredirectaddr;
+ 			if(is_array($this->results))
+ 			{
+ 				for($x=0;$x<count($this->results);$x++)
+ 				{
+ 					$this->results[$x] = $this->_striptext($this->results[$x]);
+ 					if($this->expandlinks)
+ 						$this->results[$x] = $this->_expandlinks($this->results[$x],$URI);
+ 				}
+ 			}
+ 			else
+ 			{
+ 				$this->results = $this->_striptext($this->results);
+ 				if($this->expandlinks)
+ 					$this->results = $this->_expandlinks($this->results,$URI);
+ 			}
+ 			return true;
+ 		}
+ 		else
+ 			return false;
+ 	}
+ 
+ 	
+ 
+ /*======================================================================*\
+ 	Function:	set_submit_multipart
+ 	Purpose:	Set the form submission content type to
+ 				multipart/form-data
+ \*======================================================================*/
+ 	function set_submit_multipart()
+ 	{
+ 		$this->_submit_type = "multipart/form-data";
+ 	}
+ 
+ 	
+ /*======================================================================*\
+ 	Function:	set_submit_normal
+ 	Purpose:	Set the form submission content type to
+ 				application/x-www-form-urlencoded
+ \*======================================================================*/
+ 	function set_submit_normal()
+ 	{
+ 		$this->_submit_type = "application/x-www-form-urlencoded";
+ 	}
+ 
+ 	
+ 	
  
  /*======================================================================*\
***************
*** 273,277 ****
  	function _striplinks($document)
  	{	
! 		preg_match_all("'<\s*a\s+.*href\s*=\s*			# find <a href=
  						([\"\'])?					# find single or double quote
  						(?(1) (.*?)\\1 | ([^\s\>]+))		# if quote found, match up to next matching
--- 621,625 ----
  	function _striplinks($document)
  	{	
! 		preg_match_all("'<\s*a\s.*?href\s*=\s*			# find <a href=
  						([\"\'])?					# find single or double quote
  						(?(1) (.*?)\\1 | ([^\s\>]+))		# if quote found, match up to next matching
***************
*** 335,348 ****
  						"'<[\/\!]*?[^<>]*?>'si",			// strip out html tags
  						"'([\r\n])[\s]+'",					// strip out white space
! 						"'&(quote|#34);'i",					// replace html entities
! 						"'&(amp|#38);'i",
! 						"'&(lt|#60);'i",
! 						"'&(gt|#62);'i",
! 						"'&(nbsp|#160);'i",
  						"'&(iexcl|#161);'i",
  						"'&(cent|#162);'i",
  						"'&(pound|#163);'i",
! 						"'&(copy|#169);'i"
! 						);				
  		$replace = array(	"",
  							"",
--- 683,707 ----
  						"'<[\/\!]*?[^<>]*?>'si",			// strip out html tags
  						"'([\r\n])[\s]+'",					// strip out white space
! 						"'&(quot|#34|#034|#x22);'i",		// replace html entities
! 						"'&(amp|#38|#038|#x26);'i",			// added hexadecimal values
! 						"'&(lt|#60|#060|#x3c);'i",
! 						"'&(gt|#62|#062|#x3e);'i",
! 						"'&(nbsp|#160|#xa0);'i",
  						"'&(iexcl|#161);'i",
  						"'&(cent|#162);'i",
  						"'&(pound|#163);'i",
! 						"'&(copy|#169);'i",
! 						"'&(reg|#174);'i",
! 						"'&(deg|#176);'i",
! 						"'&(#39|#039|#x27);'",
! 						"'&(euro|#8364);'i",				// europe
! 						"'&a(uml|UML);'",					// german
! 						"'&o(uml|UML);'",
! 						"'&u(uml|UML);'",
! 						"'&A(uml|UML);'",
! 						"'&O(uml|UML);'",
! 						"'&U(uml|UML);'",
! 						"'ß'i",
! 						);
  		$replace = array(	"",
  							"",
***************
*** 356,360 ****
  							chr(162),
  							chr(163),
! 							chr(169));
  					
  		$text = preg_replace($search,$replace,$document);
--- 715,731 ----
  							chr(162),
  							chr(163),
! 							chr(169),
! 							chr(174),
! 							chr(176),
! 							chr(39),
! 							chr(128),
! 							"ä",
! 							"ö",
! 							"ü",
! 							"Ä",
! 							"Ö",
! 							"Ü",
! 							"ß",
! 						);
  					
  		$text = preg_replace($search,$replace,$document);
***************
*** 377,383 ****
  
  		$match = preg_replace("|/[^\/\.]+\.[^\/\.]+$|","",$match[0]);
  				
  		$search = array( 	"|^http://".preg_quote($this->host)."|i",
! 							"|^(?!http://)(\/)?(?!mailto:)|i",
  							"|/\./|",
  							"|/[^\/]+/\.\./|"
--- 748,759 ----
  
  		$match = preg_replace("|/[^\/\.]+\.[^\/\.]+$|","",$match[0]);
+ 		$match = preg_replace("|/$|","",$match);
+ 		$match_part = parse_url($match);
+ 		$match_root =
+ 		$match_part["scheme"]."://".$match_part["host"];
  				
  		$search = array( 	"|^http://".preg_quote($this->host)."|i",
! 							"|^(\/)|i",
! 							"|^(?!http://)(?!mailto:)|i",
  							"|/\./|",
  							"|/[^\/]+/\.\./|"
***************
*** 385,388 ****
--- 761,765 ----
  						
  		$replace = array(	"",
+ 							$match_root."/",
  							$match."/",
  							"/",
***************
*** 407,410 ****
--- 784,788 ----
  	function _httprequest($url,$fp,$URI,$http_method,$content_type="",$body="")
  	{
+ 		$cookie_headers = '';
  		if($this->passcookies && $this->_redirectaddr)
  			$this->setcookies();
***************
*** 416,438 ****
  		if(!empty($this->agent))
  			$headers .= "User-Agent: ".$this->agent."\r\n";
! 		if(!empty($this->host) && !isset($this->rawheaders['Host']))
! 			$headers .= "Host: ".$this->host."\r\n";
  		if(!empty($this->accept))
  			$headers .= "Accept: ".$this->accept."\r\n";
- 		
- 		if($this->use_gzip) {
- 			// make sure PHP was built with --with-zlib
- 			// and we can handle gzipp'ed data
- 			if ( function_exists(gzinflate) ) {
- 			   $headers .= "Accept-encoding: gzip\r\n";
- 			}
- 			else {
- 			   trigger_error(
- 			   	"use_gzip is on, but PHP was built without zlib support.".
- 				"  Requesting file(s) without gzip encoding.", 
- 				E_USER_NOTICE);
- 			}
- 		}
- 		
  		if(!empty($this->referer))
  			$headers .= "Referer: ".$this->referer."\r\n";
--- 794,805 ----
  		if(!empty($this->agent))
  			$headers .= "User-Agent: ".$this->agent."\r\n";
! 		if(!empty($this->host) && !isset($this->rawheaders['Host'])) {
! 			$headers .= "Host: ".$this->host;
! 			if(!empty($this->port))
! 				$headers .= ":".$this->port;
! 			$headers .= "\r\n";
! 		}
  		if(!empty($this->accept))
  			$headers .= "Accept: ".$this->accept."\r\n";
  		if(!empty($this->referer))
  			$headers .= "Referer: ".$this->referer."\r\n";
***************
*** 467,471 ****
  			$headers .= "Content-length: ".strlen($body)."\r\n";
  		if(!empty($this->user) || !empty($this->pass))	
! 			$headers .= "Authorization: BASIC ".base64_encode($this->user.":".$this->pass)."\r\n";
  
  		$headers .= "\r\n";
--- 834,843 ----
  			$headers .= "Content-length: ".strlen($body)."\r\n";
  		if(!empty($this->user) || !empty($this->pass))	
! 			$headers .= "Authorization: Basic ".base64_encode($this->user.":".$this->pass)."\r\n";
! 		
! 		//add proxy auth headers
! 		if(!empty($this->proxy_user))	
! 			$headers .= 'Proxy-Authorization: ' . 'Basic ' . base64_encode($this->proxy_user . ':' . $this->proxy_pass)."\r\n";
! 
  
  		$headers .= "\r\n";
***************
*** 480,486 ****
  		$this->_redirectaddr = false;
  		unset($this->headers);
- 		
- 		// content was returned gzip encoded?
- 		$is_gzipped = false;
  						
  		while($currentHeader = fgets($fp,$this->_maxlinelen))
--- 852,855 ----
***************
*** 492,498 ****
  			}
  				
! 		//	if($currentHeader == "\r\n")
! 			if(preg_match("/^\r?\n$/", $currentHeader) )
! 			      break;
  						
  			// if a header begins with Location: or URI:, set the redirect
--- 861,866 ----
  			}
  				
! 			if($currentHeader == "\r\n")
! 				break;
  						
  			// if a header begins with Location: or URI:, set the redirect
***************
*** 500,504 ****
  			{
  				// 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]))
--- 868,872 ----
  			{
  				// get URL portion of the redirect
! 				preg_match("/^(Location:|URI:)[ ]+(.*)/i",chop($currentHeader),$matches);
  				// look for :// in the Location header to see if hostname is included
  				if(!preg_match("|\:\/\/|",$matches[2]))
***************
*** 524,552 ****
  				$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))
  		{
--- 892,908 ----
  				$this->response_code = $currentHeader;
  			}
! 				
  			$this->headers[] = $currentHeader;
  		}
  
! 		$results = '';
! 		do {
!     		$_data = fread($fp, $this->maxlength);
!     		if (strlen($_data) == 0) {
!         		break;
!     		}
!     		$results .= $_data;
! 		} while(true);
! 
  		if ($this->read_timeout > 0 && $this->_check_timeout($fp))
  		{
***************
*** 557,561 ****
  		// 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);	
--- 913,918 ----
  		// 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);	
***************
*** 603,607 ****
  			$headers[] = "User-Agent: ".$this->agent;
  		if(!empty($this->host))
! 			$headers[] = "Host: ".$this->host;
  		if(!empty($this->accept))
  			$headers[] = "Accept: ".$this->accept;
--- 960,967 ----
  			$headers[] = "User-Agent: ".$this->agent;
  		if(!empty($this->host))
! 			if(!empty($this->port))
! 				$headers[] = "Host: ".$this->host.":".$this->port;
! 			else
! 				$headers[] = "Host: ".$this->host;
  		if(!empty($this->accept))
  			$headers[] = "Accept: ".$this->accept;
***************
*** 641,647 ****
  			
  		for($curr_header = 0; $curr_header < count($headers); $curr_header++) {
! 			$cmdline_params .= " -H \"".$headers[$curr_header]."\"";
  		}
! 			  	                         
  		if(!empty($body))
  			$cmdline_params .= " -d \"$body\"";
--- 1001,1008 ----
  			
  		for($curr_header = 0; $curr_header < count($headers); $curr_header++) {
! 			$safer_header = strtr( $headers[$curr_header], "\"", " " );
! 			$cmdline_params .= " -H \"".$safer_header."\"";
  		}
! 		
  		if(!empty($body))
  			$cmdline_params .= " -d \"$body\"";
***************
*** 650,658 ****
  			$cmdline_params .= " -m ".$this->read_timeout;
  		
! 		$headerfile = uniqid(time());
! 		
! 		# accept self-signed certs
! 		$cmdline_params .= " -k"; 
! 		exec($this->curl_path." -D \"/tmp/$headerfile\"".escapeshellcmd($cmdline_params)." ".escapeshellcmd($URI),$results,$return);
  		
  		if($return)
--- 1011,1018 ----
  			$cmdline_params .= " -m ".$this->read_timeout;
  		
! 		$headerfile = tempnam($temp_dir, "sno");
! 
! 		$safer_URI = strtr( $URI, "\"", " " ); // strip quotes from the URI to avoid shell access
! 		exec($this->curl_path." -D \"$headerfile\"".$cmdline_params." \"".$safer_URI."\"",$results,$return);
  		
  		if($return)
***************
*** 665,669 ****
  		$results = implode("\r\n",$results);
  		
! 		$result_headers = file("/tmp/$headerfile");
  						
  		$this->_redirectaddr = false;
--- 1025,1029 ----
  		$results = implode("\r\n",$results);
  		
! 		$result_headers = file("$headerfile");
  						
  		$this->_redirectaddr = false;
***************
*** 677,681 ****
  			{
  				// 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]))
--- 1037,1041 ----
  			{
  				// get URL portion of the redirect
! 				preg_match("/^(Location: |URI:)\s+(.*)/",chop($result_headers[$currentHeader]),$matches);
  				// look for :// in the Location header to see if hostname is included
  				if(!preg_match("|\:\/\/|",$matches[2]))
***************
*** 694,704 ****
  		
  			if(preg_match("|^HTTP/|",$result_headers[$currentHeader]))
! 			{
! 			    $this->response_code = $result_headers[$currentHeader];
! 			    if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|",$this->response_code, $match))
! 			    {
! 				$this->status= $match[1];
!                 	    }
! 			}
  			$this->headers[] = $result_headers[$currentHeader];
  		}
--- 1054,1059 ----
  		
  			if(preg_match("|^HTTP/|",$result_headers[$currentHeader]))
! 				$this->response_code = $result_headers[$currentHeader];
! 
  			$this->headers[] = $result_headers[$currentHeader];
  		}
***************
*** 706,710 ****
  		// 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);	
--- 1061,1065 ----
  		// 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);	
***************
*** 725,729 ****
  			$this->results = $results;
  
! 		unlink("/tmp/$headerfile");
  		
  		return true;
--- 1080,1084 ----
  			$this->results = $results;
  
! 		unlink("$headerfile");
  		
  		return true;
***************
*** 739,744 ****
  		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];
  		}
  	}
--- 1094,1099 ----
  		for($x=0; $x<count($this->headers); $x++)
  		{
! 		if(preg_match('/^set-cookie:[\s]+([^=]+)=([^;]+)/i', $this->headers[$x],$match))
! 			$this->cookies[$match[1]] = urldecode($match[2]);
  		}
  	}
***************
*** 774,777 ****
--- 1129,1133 ----
  			{
  				$this->_isproxy = true;
+ 				
  				$host = $this->proxy_host;
  				$port = $this->proxy_port;
***************
*** 839,842 ****
--- 1195,1199 ----
  		settype($formvars, "array");
  		settype($formfiles, "array");
+ 		$postdata = '';
  
  		if (count($formvars) == 0 && count($formfiles) == 0)




More information about the geeklog-cvs mailing list