fscokopen php,PHP: fsockopen - Manual

My $0.02 on handling chunked transfer encoded output...  Has rudimentary error handling.

// Example usage...

//$server='127.0.0.1';$port='80';$uri='/cgi-bin/random-cgi';$content='Your post content...';$post_results=httpPost($server,$port,$uri,$content);

if (!is_string($post_results)) {

die('uh oh, something went wrong');

} else {

die('Here are your results: '.$post_results);

}//

// Post provided content to an http server and optionally

// convert chunk encoded results.  Returns false on errors,

// result of post on success.  This example only handles http,

// not https.

//functionhttpPost($ip=null,$port=80,$uri=null,$content=null) {

if (empty($ip))         { returnfalse; }

if (!is_numeric($port)) { returnfalse; }

if (empty($uri))        { returnfalse; }

if (empty($content))    { returnfalse; }// generate headers in array.$t= array();$t[] ='POST '.$uri.' HTTP/1.1';$t[] ='Content-Type: text/html';$t[] ='Host: '.$ip.':'.$port;$t[] ='Content-Length: '.strlen($content);$t[] ='Connection: close';$t=implode("\r\n",$t) ."\r\n\r\n".$content;//

// Open socket, provide error report vars and timeout of 10

// seconds.

//$fp= @fsockopen($ip,$port,$errno,$errstr,10);// If we don't have a stream resource, abort.if (!(get_resource_type($fp) =='stream')) { returnfalse; }//

// Send headers and content.

//if (!fwrite($fp,$t)) {fclose($fp);

returnfalse;

}//

// Read all of response into $rsp and close the socket.

//$rsp='';

while(!feof($fp)) {$rsp.=fgets($fp,8192); }fclose($fp);//

// Call parseHttpResponse() to return the results.

//returnparseHttpResponse($rsp);

}//

// Accepts provided http content, checks for a valid http response,

// unchunks if needed, returns http content without headers on

// success, false on any errors.

//functionparseHttpResponse($content=null) {

if (empty($content)) { returnfalse; }// split into array, headers and content.$hunks=explode("\r\n\r\n",trim($content));

if (!is_array($hunks) orcount($hunks) <2) {

returnfalse;

}$header=$hunks[count($hunks) -2];$body=$hunks[count($hunks) -1];$headers=explode("\n",$header);

unset($hunks);

unset($header);

if (!verifyHttpResponse($headers)) { returnfalse; }

if (in_array('Transfer-Encoding: chunked',$headers)) {

returntrim(unchunkHttpResponse($body));

} else {

returntrim($body);

}

}//

// Validate http responses by checking header.  Expects array of

// headers as argument.  Returns boolean.

//functionvalidateHttpResponse($headers=null) {

if (!is_array($headers) orcount($headers) <1) { returnfalse; }

switch(trim(strtolower($headers[0]))) {

case'http/1.0 100 ok':

case'http/1.0 200 ok':

case'http/1.1 100 ok':

case'http/1.1 200 ok':

returntrue;

break;

}

returnfalse;

}//

// Unchunk http content.  Returns unchunked content on success,

// false on any errors...  Borrows from code posted above by

// jbr at ya-right dot com.

//functionunchunkHttpResponse($str=null) {

if (!is_string($str) orstrlen($str) <1) { returnfalse; }$eol="\r\n";$add=strlen($eol);$tmp=$str;$str='';

do {$tmp=ltrim($tmp);$pos=strpos($tmp,$eol);

if ($pos===false) { returnfalse; }$len=hexdec(substr($tmp,0,$pos));

if (!is_numeric($len) or$len<0) { returnfalse; }$str.=substr($tmp, ($pos+$add),$len);$tmp=substr($tmp, ($len+$pos+$add));$check=trim($tmp);

} while(!empty($check));

unset($tmp);

return$str;

}?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值