Snoopy::_httprequest()publicWP 1.0

Method of the class: Snoopy{}

No Hooks.

Return

null. Nothing (null).

Usage

$Snoopy = new Snoopy();
$Snoopy->_httprequest( $url, $fp, $URI, $http_method, $content_type, $body );
$url (required)
-
$fp (required)
-
$URI (required)
-
$http_method (required)
-
$content_type **
-
Default: ""
$body **
-
Default: ""

Snoopy::_httprequest() code WP 6.6.2

function _httprequest($url,$fp,$URI,$http_method,$content_type="",$body="")
{
	$cookie_headers = '';
	if($this->passcookies && $this->_redirectaddr)
		$this->setcookies();

	$URI_PARTS = parse_url($URI);
	if(empty($url))
		$url = "/";
	$headers = $http_method." ".$url." ".$this->_httpversion."\r\n";
	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) && $this->port != 80)
			$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";
	if(!empty($this->cookies))
	{
		if(!is_array($this->cookies))
			$this->cookies = (array)$this->cookies;

		reset($this->cookies);
		if ( count($this->cookies) > 0 ) {
			$cookie_headers .= 'Cookie: ';
			foreach ( $this->cookies as $cookieKey => $cookieVal ) {
			$cookie_headers .= $cookieKey."=".urlencode($cookieVal)."; ";
			}
			$headers .= substr($cookie_headers,0,-2) . "\r\n";
		}
	}
	if(!empty($this->rawheaders))
	{
		if(!is_array($this->rawheaders))
			$this->rawheaders = (array)$this->rawheaders;
		foreach ( $this->rawheaders as $headerKey => $headerVal )
			$headers .= $headerKey.": ".$headerVal."\r\n";
	}
	if(!empty($content_type)) {
		$headers .= "Content-Type: $content_type";
		if ($content_type == "multipart/form-data")
			$headers .= "; boundary=".$this->_mime_boundary;
		$headers .= "\r\n";
	}
	if(!empty($body))
		$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";

	// set the read timeout if needed
	if ($this->read_timeout > 0)
		socket_set_timeout($fp, $this->read_timeout);
	$this->timed_out = false;

	fwrite($fp,$headers.$body,strlen($headers.$body));

	$this->_redirectaddr = false;
	unset($this->headers);

	while($currentHeader = fgets($fp,$this->_maxlinelen))
	{
		if ($this->read_timeout > 0 && $this->_check_timeout($fp))
		{
			$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:)[ ]+(.*)/i",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;
		}

		$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))
	{
		$this->status=-100;
		return false;
	}

	// check if there is 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;
}