post请求
请求页面
<?php $domain='www.my.com'; $url='/feedback.php?goi='.urlencode('1睡45'); $data = 'foo='.urlencode('fd踹24').'&bar='.urlencode('p2垢22'); $fp=fsockopen($domain,80); if (!$fp) { die('Unable to open'); } $cmd=" POST $url HTTP/1.0 Content-type: application/x-www-form-urlencoded Content-length: ".strlen($data)." Accept: *\/* $data "; fputs($fp,$cmd); $s=''; while($line=fgets($fp)) { $s.=$line; } fclose($fp); echo '<xmp>'.$s.'</xmp>';
<?php echo '$_POST '; print_r($_POST); echo '$_GET '; print_r($_GET);
网上借鉴的
<?php #ini_set('display_error', 0); error_reporting(0); //GOGOCMS所用的类,只有看不到的,没有采集不到的! //防止要获取的URL地址301到了其他地方 //可以启用GZIP,加快下载速度 //支持COOKIE,POST //效率绝对超过目前网络上流传的封装好的类或函数 class Get_url{ public $url = ''; //需要获取的URL public $cookie = ''; //需要发送的cookies public $post = false; //模拟POST时发送的数据,默认不发送 public $timeout = 30; //超时时间 public $return_str = ''; //获取到的数据 public $gzip = true; //是否启用GZIP加快下载速度 function __construct(){ } public function Get(){ if ($this->url == '') return false; $matches = parse_url($this->url); !isset($matches['host']) && $matches['host'] = ''; !isset($matches['path']) && $matches['path'] = ''; !isset($matches['query']) && $matches['query'] = ''; !isset($matches['port']) && $matches['port'] = ''; $host = $matches['host']; $boardurl = 'http://'.$host.'/'; $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/'; $port = !empty($matches['port']) ? $matches['port'] : 80; $conf_arr = array( 'limit'=>0, 'post'=>$this->post, 'cookie'=>$this->cookie, 'bysocket'=>FALSE, 'ip'=>'', 'timeout'=>$this->timeout, 'block'=>TRUE, ); foreach ($conf_arr as $k=>$v) ${$k} = $v; $gzip = $this->gzip ? 'gzip' : ''; if ($post){ if(is_array($post)) $post = http_build_query($post);//该函数需要PHP5.0以上版本才支持,如为较低版本需手工处理一下 $out = "POST $path HTTP/1.0\r\n"; $out .= "Accept: */*\r\n"; $out .= "Referer: $boardurl\r\n"; //伪造来路为需要获取的URL的主机名 $out .= "Accept-Language: zh-cn\r\n"; $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; //伪造User-Agent $out .= "Host: $host\r\n"; $out .= 'Content-Length: '.strlen($post)."\r\n"; $out .= "Connection: Close\r\n"; $out .= "Accept-Encoding: $gzip\r\n"; //设置可以接受GZIP压缩格式的文档 $out .= "Cache-Control: no-cache\r\n"; $out .= "Cookie: $cookie\r\n\r\n"; $out .= $post; } else { $out = "GET $path HTTP/1.0\r\n"; $out .= "Accept: */*\r\n"; $out .= "Referer: $boardurl\r\n"; $out .= "Accept-Language: zh-cn\r\n"; $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; $out .= "Host: $host\r\n"; $out .= "Connection: Close\r\n"; $out .= "Accept-Encoding: $gzip\r\n"; //设置可以接受GZIP压缩格式的文档 $out .= "Cookie: $cookie\r\n\r\n"; } $fp = fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout); if(!$fp) { return false; }else { stream_set_blocking($fp, $block); stream_set_timeout($fp, $timeout); fwrite($fp, $out); $status = stream_get_meta_data($fp); if(!$status['timed_out']) { $h=''; while (!feof($fp)) { if(($header = @fgets($fp)) && ($header == "\r\n" || $header == "\n")) { break; } $h .= $header; } $check_http = $this->check_http($h); if ($check_http!==200) return $check_http; $gzip = false; if (strstr($h,'gzip')) $gzip = true; $stop = false; while( !( $stop && $status['timed_out'] && feof($fp) ) ) { if($status['timed_out']) return false; $data = fread($fp, ($limit == 0 || $limit > 128 ? 128 : $limit)); #$predata = ''; #$return = ''; if ($predata.$data==''){ //这得加个判断,有些服务器很变态……判断不了FOEF break; } $predata = $data; $return .= $data; if($limit) { $limit -= strlen($data); $stop = $limit <= 0; } } } @fclose($fp); $this->return_str = $gzip?$this->gzdecode($return):$return; return true; } } public function Check_http($h){ if (strstr($h,' 301 ') || strstr($h,' 302 ')){ preg_match("/Location:(.*?)$/im",$h,$match); $url = trim($match[1]); preg_match("/Set-Cookie:(.*?)$/im",$h,$match); $cookie = trim($match[1]); $r = new Get_url(); $r->url = $url; $r->cookie = $cookie; $r_return = $r->Get(); $this->return_str = $r->return_str; return $r_return; } if (!strstr($h,' 200 ')) return false; //如果还没有正常,那么…… else return 200; } public function gzdecode($data){ //解压GZIP,这个函数从网上找的 $flags = ord(substr($data, 3, 1)); $headerlen = 10; $extralen = 0; $filenamelen = 0; if ($flags & 4) { $extralen = unpack('v' ,substr($data, 10, 2)); $extralen = $extralen[1]; $headerlen += 2 + $extralen; } if ($flags & 8) $headerlen = strpos($data, chr(0), $headerlen) + 1; if ($flags & 16) $headerlen = strpos($data, chr(0), $headerlen) + 1; if ($flags & 2) $headerlen += 2; $unpacked = @gzinflate(substr($data, $headerlen)); if ($unpacked === FALSE) $unpacked = $data; return $unpacked; } } //以下为测试 $get = new Get_url(); $get->url = "http://112.124.24.77/Public/authLogin"; $get->post = array('username'=>'username','password'=>'username'); //如果需要POST数据 $get->timeout = 10; $get->Get(); #echo "<textarea>$get->return_str</textarea>"; echo $get->return_str;