注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

~~

~~

 
 
 

日志

 
 

PHP + socket 编程 发送HTTP请求  

2014-02-20 08:39:19|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
<?php
/*
PHP + socket 编程  发送HTTP请求

模拟下载、注册、登陆、批量发帖
*/

//http请求类接口

interface Proto{

//连接Url
function conn($url);

//发送get查询
function get();

//发送post查询
function post();

//关闭连接
function close();
}

class Http implements Proto{

const CRLF = "\r\n";
protected $url = null;

protected $errno = -1;
protected $errstr = '';
protected $fh = null;

protected $line = array();
protected $header = array();
protected $body = array();
protected $response = '';

public function __construct($url){
$this->conn($url);

$this->setHeader('Host: '.$this->url['host']);
}
//请求行
protected function setLine($method){
$this->line[0] = $method.' '.$this->url['path'].' '.'HTTP/1.1';
}
//头信息
protected function setHeader($headerline){
//$this->header[] = 'Host: '.$this->url['host'];
$this->header[] = $headerline;
}
//主体信息
protected function setBody($body){
$this->body[] = http_build_query($body);
}
//连接Url
public function conn($url){
$this->url = parse_url($url);
if(!isset($this->url['port'])){
$this->url['port'] = 80;
}
$this->fh = fsockopen($this->url['host'], $this->url['port'], $this->errno, $this->errstr,3);
}

//发送get查询
public function get(){
$this->setLine('GET');
$this->request();
return $this->response;
}


//发送post查询
public function post($body=array()){
$this->setLine('POST');//请求行
//content-type设计
$this->setHeader('Content-type: application/x-www/form-urlencoded');

//主体信息 与GET不同的地方
$this->setBody($body);
//content-length
$this->setHeader('Content-length: '.strlen($this->body[0]));

   $this->request();
}
//
public function request(){
//将请求行、头信息、实体信息放到一个数组中,进行拼接
$req = array_merge($this->line,$this->header,array(''),array(http_build_query($this->body)),array(''));
//print_r($req);

$req = implode(self::CRLF, $req);
//echo $req;

fwrite($this->fh, $req);
while(!feof($this->fh)){
$this->response .= fread($this->fh, 1024);
}

$this->close();
//return $this->response;
}

//关闭连接
public function close(){
fclose($this->fh);
}

}

//GET测试
/*$url = 'http://view.163.com/14/0124/07/9JBD05VP00012Q9L.html';

$http = new Http($url);
echo $http->get();*/
//$http->request();
//print_r($http);


//POST测试
$url = '';
$str = str_shuffle('abcdefghigklmnopqrstuvwxyz');
$title = substr($str, 1, 3);
$content = substr($str, 5, 9);

$http = new http();
$http->post(array('title'=>$title, 'content'=>$content, 'submit'='留言'));

?>
  评论这张
 
阅读(260)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018