PHP使用fsockopen获取的html内容要如何进行处理?
由于有个内网自定义hosts的接口,我为了避免DNS这一步,就采用了fsockopen的方式访问接口。
不过由于返回值是一串我不太理解的方式,比如:
4d8 {"code":1,"data":{"cate":"\u5e7d\u9ed8\u6545\u4e8b","title":"\u9152\u540e\u7684\u81ea\u4fe1","content":"\u63a8\u9500\u5458\u60f3\u4e86\u60f3\uff0c\u4e00\u8a00\u672a\u53d1\u5730\u51fa\u4e86\u5564\u9152\u9986\u300210\u5206\u949f\u540e\uff0c\u4ed6\u56de\u6765\u8fce\u6218\u3002<\/p>"}} 0
我不太理解头部类如4d8和尾部0这样的字符是表示什么的?
有没有比较高效的方式只取得大括号中的值。
PS:我目前采用的是笨方法,就是正则获得花括号中的值。
代码实现如下:
function remote_visit($ip, $host, $port, $url, $timeout){
$errno = '';
$errstr = '';
$fp = fsockopen($ip, $port, $errno, $errstr, $timeout);
if(!$fp){ // connect fail
return false;
}
$out = "GET ${url} HTTP/1.1\r\n";
$out .= "Host: ${host}\r\n";
$out .= "Connection: close\r\n\r\n";
fputs($fp, $out);
$response = '';
// 读取内容
while($row=fread($fp, 4096)){
$response .= $row;
}
fclose($fp);
$pos = strpos($response, "\r\n\r\n");
$response = substr($response, $pos+4);
//我现在采用了正则的方式取得里面的json部分,如下两行代码
preg_match('@{(.*?)}@si',$response,$match);
$response = '{'.$match[1].'}}';
return $response;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论