php 模拟访问网页,php 模拟用户浏览网页代码

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)." ";

}

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

$sRequest = $sMethod." ".$this->sUri." HTTP/1.1 ";

$sRequest .= $this->sRequestHeader;

if ($sMethod == 'POST'){

$sRequest .= "Content-Type: application/x-www-form-urlencoded ";

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

$sRequest .= " ";

$sRequest .= $sPostData." ";

}

$sRequest .= " ";

$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 = '/ /';

$arMatchResponsePart = preg_split($sPatternSeperate, $this->sResponse, 2);

return $arMatchResponsePart[1];

}

function getResponseHead(){

$sPatternSeperate = '/ /';

$arMatchResponsePart = preg_split($sPatternSeperate, $this->sResponse, 2);

return $arMatchResponsePart[0];

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值