php socket http,用PHP的Socket实现HTTP请求

用PHP的Socket实现HTTP请求

(2010-03-10 21:16:58)

标签:

杂谈

要实现HTTP访问无非就是用Socket发送一个请求,然后读取返回信息。当然也可以用fsockopen()这个函数来实现,不过两个的区别不是很大

class HttpRequest{

var $sHostAdd;

var $sUri;

var $iPort;

var $sRequestHeader;

var $sResponse;

function HttpRequest($sUrl){

$sPatternUrlPart =

'/http:\/\/([a-z-\.0-9]+)(:(\d+)){0,1}(.*)/i';

$arMatchUrlPart = array();

preg_match($sPatternUrlPart, $sUrl, $arMatchUrlPart);

$this->sHostAdd =

gethostbyname($arMatchUrlPart[1]);

if (empty($arMatchUrlPart[4])){

$this->sUri = '/';

}else{

$this->sUri = $arMatchUrlPart[4];

}

if (empty($arMatchUrlPart[3])){

$this->iPort = 80;

}else{

$this->iPort = $arMatchUrlPart[3];

}

$this->addRequestHeader('Host:

'.$arMatchUrlPart[1]);

$this->addRequestHeader('Connection:

Close');

}

function addRequestHeader($sHeader){

$this->sRequestHeader .=

trim($sHeader)."\r\n";

}

function sendRequest($sMethod = 'GET', $sPostData = ''){

$sRequest = $sMethod." ".$this->sUri."

HTTP/1.1\r\n";

$sRequest .= $this->sRequestHeader;

if ($sMethod == 'POST'){

$sRequest .= "Content-Type:

application/x-www-form-urlencoded\r\n";

$sRequest .= "Content-Length: ".strlen($sPostData)."\r\n";

$sRequest .= "\r\n";

$sRequest .= $sPostData."\r\n";

}

$sRequest .= "\r\n";

$sockHttp = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if (!$sockHttp){

die('socket_create() failed!');

}

$resSockHttp = socket_connect($sockHttp,

$this->sHostAdd, $this->iPort);

if (!$resSockHttp){

die('socket_connect() failed!');

}

socket_write($sockHttp, $sRequest, strlen($sRequest));

$this->sResponse = '';

while ($sRead = socket_read($sockHttp, 4096)){

$this->sResponse .= $sRead;

}

socket_close($sockHttp);

}

function getResponse(){

return $this->sResponse;

}

function getResponseBody(){

$sPatternSeperate = '/\r\n\r\n/';

$arMatchResponsePart = preg_split($sPatternSeperate,

$this->sResponse, 2);

return $arMatchResponsePart[1];

}

function getResponseHead(){

$sPatternSeperate = '/\r\n\r\n/';

$arMatchResponsePart = preg_split($sPatternSeperate,

$this->sResponse, 2);

return $arMatchResponsePart[0];

}

}

?>

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值