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

📄 http.php

📁 网络硬盘_支持1GB文件上传和续传_无错版
💻 PHP
📖 第 1 页 / 共 4 页
字号:
							$secure=(strtolower($this->protocol)=="https");							while(($name=trim(UrlDecode($this->Tokenize("="))))!="")							{								$value=UrlDecode($this->Tokenize(";"));								switch($name)								{									case "domain":										$domain=$value;										break;									case "path":										$path=$value;										break;									case "expires":										if(ereg("^((Mon|Monday|Tue|Tuesday|Wed|Wednesday|Thu|Thursday|Fri|Friday|Sat|Saturday|Sun|Sunday), )?([0-9]{2})\\-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\-([0-9]{2,4}) ([0-9]{2})\\:([0-9]{2})\\:([0-9]{2}) GMT$",$value,$matches))										{											$year=intval($matches[5]);											if($year<1900)												$year+=($year<70 ? 2000 : 1900);											$expires="$year-".$this->months[$matches[4]]."-".$matches[3]." ".$matches[6].":".$matches[7].":".$matches[8];										}										break;									case "secure":										$secure=1;										break;								}							}							if(strlen($this->SetCookie($cookie_name, $cookie_value, $expires, $path , $domain, $secure)))								$this->error="";						}					}			}		}        //store cookie in session        $_SESSION['cookies']=$this->cookies;		$this->chunked=$chunked;		return("");	}	Function Authenticate(&$headers, $proxy, &$proxy_authorization, &$user, &$password, &$realm, &$workstation)	{        //require 'sasl.php';		if($proxy)		{			$authenticate_header="proxy-authenticate";			$authorization_header="Proxy-Authorization";			$authenticate_status="407";			$authentication_mechanism=$this->proxy_authentication_mechanism;		}		else		{			$authenticate_header="www-authenticate";			$authorization_header="Authorization";			$authenticate_status="401";			$authentication_mechanism=$this->authentication_mechanism;		}		if(IsSet($headers[$authenticate_header]))		{			if(function_exists("class_exists")			&& !class_exists("sasl_client_class"))				return($this->SetError("the SASL client class needs to be loaded to be able to authenticate".($proxy ? " with the proxy server" : "")." and access this site"));			if(GetType($headers[$authenticate_header])=="array")				$authenticate=$headers[$authenticate_header];			else				$authenticate=array($headers[$authenticate_header]);			for($mechanisms=array(),$m=0;$m<count($authenticate);$m++)			{				$mechanism=$this->Tokenize($authenticate[$m]," ");				if(strlen($authentication_mechanism))				{					if(!strcmp($authentication_mechanism,$mechanism))					{						$mechanisms[]=$mechanism;						break;					}				}				else					$mechanisms[]=$mechanism;			}			$sasl=new sasl_client_class;			if(IsSet($user))				$sasl->SetCredential("user",$user);			if(IsSet($password))				$sasl->SetCredential("password",$password);			if(IsSet($realm))				$sasl->SetCredential("realm",$realm);			if(IsSet($workstation))				$sasl->SetCredential("workstation",$workstation);			do			{				$status=$sasl->Start($mechanisms,$message,$interactions);			}			while($status==SASL_INTERACT);			switch($status)			{				case SASL_CONTINUE:					break;				case SASL_NOMECH:					return($this->SetError(($proxy ? "proxy " : "")."authentication error: ".(strlen($authentication_mechanism) ? "authentication mechanism ".$authentication_mechanism." may not be used: " : "").$sasl->error));				default:					return($this->SetError("Could not start the SASL ".($proxy ? "proxy " : "")."authentication client: ".$sasl->error));			}			for(;;)			{				if(strlen($error=$this->ReadReplyBody($body,$this->file_buffer_length)))					return($error);				if(strlen($body)==0)					break;			}			$authorization_value=$sasl->mechanism.(IsSet($message) ? " ".base64_encode($message) : "");            $arguments=array(				"Headers"=>array(                    'Host' => $this->host_name,                    'User-Agent' => $this->request_headers['User-Agent'],					$authorization_header=>$authorization_value,					"Keep-Alive"=>"300"				)			);            $arguments["RequestMethod"]='GET';			if(!$proxy			&& strlen($proxy_authorization))				$arguments["Headers"]["Proxy-Authorization"]=$proxy_authorization;			if(strlen($error=$this->Close())			|| strlen($error=$this->Open($arguments)))				return($this->SetError($error));			$authenticated=0;			$response="";			if(IsSet($message))			{				if(strlen($error=$this->SendRequest($arguments))				|| strlen($error=$this->ReadReplyHeadersResponse($headers)))					return($this->SetError($error));				if(!IsSet($headers[$authenticate_header]))					$authenticate=array();				elseif(GetType($headers[$authenticate_header])=="array")					$authenticate=$headers[$authenticate_header];				else					$authenticate=array($headers[$authenticate_header]);				for($mechanism=0;$mechanism<count($authenticate);$mechanism++)				{					if(!strcmp($this->Tokenize($authenticate[$mechanism]," "),$sasl->mechanism))					{						$response=$this->Tokenize("");						break;					}				}				switch($this->response_status)				{					case "200":						if($proxy)							$proxy_authorization=$authorization_value;						$authenticated=1;						break;                    case "401":                        return '401';						break;					case $authenticate_status:						break;					default:                        //if 30x,redirect or 40x,auth again                        if(is_numeric($this->response_status))                        {                            $this->ReadReplyHeaders($headers);                            return "";                        }						if($proxy						&& !strcmp($this->response_status,"401"))						{							$proxy_authorization=$authorization_value;							$authenticated=1;							break;						}						return($this->SetError(($proxy ? "proxy " : "")."authentication error: ".$this->response_status." ".$this->response_message));				}			}			for(;!$authenticated;)			{				do				{					$status=$sasl->Step($response,$message,$interactions);				}				while($status==SASL_INTERACT);				switch($status)				{					case SASL_CONTINUE:						$authorization_value=$sasl->mechanism.(IsSet($message) ? " ".base64_encode($message) : "");						$arguments=array(							"Headers"=>array(								$authorization_header=>$authorization_value,								"Keep-Alive"=>"300"							)						);						if(!$proxy						&& strlen($proxy_authorization))							$arguments["Headers"]["Proxy-Authorization"]=$proxy_authorization;						if(strlen($error=$this->SendRequest($arguments))						|| strlen($error=$this->ReadReplyHeadersResponse($headers)))							return($this->SetError($error));						switch($this->response_status)						{							case "200":								if($proxy)									$proxy_authorization=$authorization_value;								$authenticated=1;								break;							case $authenticate_status:								if(GetType($headers[$authenticate_header])=="array")									$authenticate=$headers[$authenticate_header];								else									$authenticate=array($headers[$authenticate_header]);								for($response="",$mechanism=0;$mechanism<count($authenticate);$mechanism++)								{									if(!strcmp($this->Tokenize($authenticate[$mechanism]," "),$sasl->mechanism))									{										$response=$this->Tokenize("");										break;									}								}								for(;;)								{									if(strlen($error=$this->ReadReplyBody($body,$this->file_buffer_length)))										return($error);									if(strlen($body)==0)										break;								}								$this->state="Connected";								break;							default:								if($proxy								&& !strcmp($this->response_status,"401"))								{									$proxy_authorization=$authorization_value;									$authenticated=1;									break;								}								return($this->SetError(($proxy ? "proxy " : "")."authentication error: ".$this->response_status." ".$this->response_message));						}						break;					default:						return($this->SetError("Could not process the SASL ".($proxy ? "proxy " : "")."authentication step: ".$sasl->error));				}			}		}		return("");	}		Function ReadReplyHeaders(&$headers)	{        if($this->state!='GotReplyHeaders')		if(strlen($error=$this->ReadReplyHeadersResponse($headers)))			return($error);		$proxy_authorization="";		switch($this->response_status)		{			case "100":				$this->state="RequestSent";				return($this->ReadReplyHeaders($headers));			case "301":			case "302":			case "303":			case "307":				if($this->follow_redirect)				{					if(!IsSet($headers["location"])					|| strlen($headers["location"])==0)						return($this->SetError("3 it was received a redirect without location URL"));					$location=$headers["location"];					if(strcmp($location[0],"/"))					{						$location_arguments=parse_url($location);						if(!IsSet($location_arguments["scheme"]))							$location=dirname($this->request_uri)."/".$location;					}					if(!strcmp($location[0],"/"))						$location=$this->protocol."://".$this->host_name.($this->host_port ? ":".$this->host_port : "").$location;					$error=$this->GetRequestArguments($location,$arguments);					if(strlen($error))						return($this->SetError("could not process redirect url: ".$error));					$arguments["RequestMethod"]="GET";					if(strlen($error=$this->Close())==0					&& strlen($error=$this->Open($arguments))==0					&& strlen($error=$this->SendRequest($arguments))==0)					{						$this->redirection_level++;						if($this->redirection_level>$this->redirection_limit)							$error="it was exceeded the limit of request redirections";						else							$error=$this->ReadReplyHeaders($headers);						$this->redirection_level--;					}                    $_SESSION['cookies']=$this->cookies;					if(strlen($error))						return($this->SetError($error));				}				break;			case "407":				if(strlen($error=$this->Authenticate($headers, 1, $proxy_authorization, $this->proxy_request_user, $this->proxy_request_password, $this->proxy_request_realm, $this->proxy_request_workstation)))					return($error);				if(strcmp($this->response_status,"401"))					return("");			case "401":                preg_match_all("'([a-z0-9]+)\s*realm=([\"\'])?(?(1) (.*?)\\2 | ([^\s]+) )'isx",$headers["www-authenticate"],$result);                $auth=$result[1][0];                if(isset($_SESSION[$this->host_name.':'.$auth]))                {                    list($this->request_user,$this->request_password)=split(':',$_SESSION[$this->host_name.':'.$auth]);                }                else                {                    #show_auth_form($headers["www-authenticate"]);                    return "";                }                $error=$this->Authenticate($headers, 0, $proxy_authorization, $this->request_user, $this->request_password, $this->request_realm, $this->request_workstation);                if(is_numeric($error))                {                   return "";                }                else				return($error);		}		return("");	}	Function ReadReplyBody(&$body,$length)	{		$body="";		if(strlen($this->error))			return($this->error);		switch($this->state)		{			case "Disconnected":				return($this->SetError("1 connection was not yet established"));			case "Connected":				return($this->SetError("2 request was not sent"));			case "RequestSent":				if(($error=$this->ReadReplyHeaders($headers))!="")					return($error);				break;			case "GotReplyHeaders":				break;			default:				return($this->SetError("3 can not get request headers in the current connection state"));		}		if($this->content_length_set)			$length=min($this->content_length-$this->read_length,$length);		if($length>0		&& !$this->EndOfInput()		&& ($body=$this->ReadBytes($length))=="")		{			$version=explode(".",function_exists("phpversion") ? phpversion() : "3.0.7");			$php_version=intval($version[0])*1000000+intval($version[1])*1000+intval($version[2]);			if($php_version<4003002			|| ($php_version>4003004			&& $php_version!=4003007)			|| !$this->EndOfInput())				return($this->SetError("4 could not get the request reply body: ".$this->error));		}		$this->read_length+=strlen($body);		return("");	}	Function GetPersistentCookies(&$cookies)	{		$now=gmdate("Y-m-d H-i-s");		$cookies=array();		for($secure_cookies=0,Reset($this->cookies);$secure_cookies<count($this->cookies);Next($this->cookies),$secure_cookies++)		{			$secure=Key($this->cookies);			for($domain=0,Reset($this->cookies[$secure]);$domain<count($this->cookies[$secure]);Next($this->cookies[$secure]),$domain++)			{				$domain_pattern=Key($this->cookies[$secure]);				for(Reset($this->cookies[$secure][$domain_pattern]),$path_part=0;$path_part<count($this->cookies[$secure][$domain_pattern]);Next($this->cookies[$secure][$domain_pattern]),$path_part++)				{					$path=Key($this->cookies[$secure][$domain_pattern]);					for(Reset($this->cookies[$secure][$domain_pattern][$path]),$cookie=0;$cookie<count($this->cookies[$secure][$domain_pattern][$path]);Next($this->cookies[$secure][$domain_pattern][$path]),$cookie++)					{						$cookie_name=Key($this->cookies[$secure][$domain_pattern][$path]);						$expires=$this->cookies[$secure][$domain_pattern][$path][$cookie_name]["expires"];						if($expires!=""						&& strcmp($now,$expires)<0)							$cookies[$secure][$domain_pattern][$path][$cookie_name]=$this->cookies[$secure][$domain_pattern][$path][$cookie_name];					}				}			}		}	}};?>

⌨️ 快捷键说明

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