PHP+Socket模拟发送GET、POST请求
/** * 使用PHP Socket 编程模拟Http post和get请求 * @author koma */ class Http{ private $sp = "\r\n"; //这里必须要写成双引号 private $protocol = ‘HTTP/1.1‘; private $requestLine = ""; private $requestHeader = ""; private $requestBody = ""; private $requestInfo = ""; private $fp = null; private $urlinfo = null; private $header = array(); private $body = array(); public function __construct($url) { $this->parseurl($url); $port = isset($this->urlinfo[‘port‘]) ? isset($this->urlinfo[‘port‘]) : ‘80‘; /* * 注意:这里的fsockopen中的url参数形式为"www.xxx.com" * 不能够带"http://"这种 */ $this->fp = fsockopen($this->urlinfo[‘host‘], $port, $errno, $errstr, 30); if ( !$this->fp ) { echo $errstr.‘(‘.$errno.‘)‘; exit(); } $this->header[‘Host‘] = $this->urlinfo[‘host‘]; } public function get($header = array(), $body = array()) { $this->header = array_merge($this->header, $header); $this->body = $body; $this->request(‘GET‘); } public function post($header = array(), $body = array()) { $this->header = array_merge($this->header, $header); $this->body = $body; $this->request(‘POST‘); } private function request($method) { $header = ""; $this->requestLine = $method.‘ ‘.$this->urlinfo[‘path‘].‘ ‘.$this->protocol; foreach ( $this->header as $key => $value ) { $header .= $header == "" ? $key.‘:‘.$value : $this->sp.$key.‘:‘.$value; } $this->requestHeader = $header.$this->sp.$this->sp; $this->requestInfo = $this->requestLine.$this->sp.$this->requestHeader; if ( !empty($this->body) ) { $body = ""; foreach ( $this->body as $key => $value ) { $body .= $body == "" ? $key.‘=‘.$value : ‘&‘.$key.‘=‘.$value; } $this->requestInfo .= $body; } if ( fwrite($this->fp, $this->requestInfo) ) { while ( !feof($this->fp) ) { $str = fread($this->fp, 1024); echo $str; } } fclose($this->fp); } private function parseurl($url) { $this->urlinfo = parse_url($url); } } $url = "http://news.163.com/14/1102/01/AA0PFA7Q00014AED.html"; $http = new Http($url); /* 发送get请求 */ echo $http->get(array( ‘User-Agent‘ => ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36‘, )); /* 发送post请求 echo $http->post(array( ‘User-Agent‘ => ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36‘, //对于post请求必须增加这两项 ‘Content-Length‘ => 20, ‘Content-Type‘ => ‘application/x-www-form-urlencoded‘ ), array(‘username‘=>‘koma‘, ‘age‘=>22)); */
看一看,你怎么看?欢迎指正!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。