method = ''; $this->cookie = ''; $this->post = ''; $this->header = ''; $this->errno = 0; $this->errstr = ''; $this->ContentType=''; } function http_request($url , $postdata = array()){ if(function_exists('curl_init')) { $return = $this->webscan_curl($url , $postdata); }else{ $return = $this->webscan_fsockopen($url , $postdata); } return $return; } function webscan_curl($url , $postdata = array()){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); $response = curl_exec($ch); $httpcode = curl_getinfo($ch,CURLINFO_HTTP_CODE); curl_close($ch); return array('httpcode'=>$httpcode,'response'=>$response); } function webscan_fsockopen($url, $data = array(), $referer = '', $limit = 0, $timeout = 15, $block = TRUE) { $this->method = 'POST'; $this->ContentType = "Content-Type: application/x-www-form-urlencoded\r\n"; if($data) { $post = ''; foreach($data as $k=>$v) { $post .= $k.'='.rawurlencode($v).'&'; } $this->post .= substr($post, 0, -1); } return $this->fsockopen_base($url, $referer, $limit, $timeout, $block); } function fsockopen_base($url, $referer = '', $limit = 0, $timeout = 30, $block = TRUE) { $matches = parse_url($url); $host = $matches['host']; $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/'; $port = $matches['port'] ? $matches['port'] : 80; if($referer == '') $referer = URL; $out = "$this->method $path HTTP/1.1\r\n"; $out .= "Accept: */*\r\n"; $out .= "Referer: $referer\r\n"; $out .= "Accept-Language: zh-cn\r\n"; $out .= "User-Agent: ".$_SERVER['HTTP_USER_AGENT']."\r\n"; $out .= "Host: $host\r\n"; if($this->method == 'POST') { $out .= $this->ContentType; $out .= "Content-Length: ".strlen($this->post)."\r\n"; $out .= "Cache-Control: no-cache\r\n"; $out .= "Connection: Close\r\n\r\n"; $out .= $this->post; } else { $out .= "Connection: Close\r\n\r\n"; } if($timeout > ini_get('max_execution_time')) @set_time_limit($timeout); $fp = @fsockopen($host, $port, $errno, $errstr, $timeout); $this->post = ''; if(!$fp) { return false; } else { stream_set_blocking($fp, $block); stream_set_timeout($fp, $timeout); fwrite($fp, $out); $this->data = ''; $status = stream_get_meta_data($fp); if(!$status['timed_out']) { $maxsize = min($limit, 1024000); if($maxsize == 0) $maxsize = 1024000; $start = false; while(!feof($fp)) { if($start) { $line = fread($fp, $maxsize); if(strlen($this->data) > $maxsize) break; $this->data .= $line; } else { $line = fgets($fp); $this->header .= $line; if($line == "\r\n" || $line == "\n") $start = true; } } } fclose($fp); if(!empty($this->header)){ $header_info=preg_replace("/\r\n\r\n.*\$/",'',$this->header); $headers=explode("\r\n",$header_info); $httpcode = substr($headers[0], 9, 3); } $response = $this->data; return array('httpcode'=>$httpcode,'response'=>$response); } } }