问答

PHP使用fsockopen获取的html内容要如何进行处理?

作者:admin 2021-06-24 我要评论

由于有个内网自定义hosts的接口,我为了避免DNS这一步,就采用了fsockopen的方式访问接口。 不过由于返回值是一串我不太理解的方式,比如: 4d8 {"code":1,"data...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

由于有个内网自定义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;
}

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • PHP使用fsockopen获取的html内容要如何

    PHP使用fsockopen获取的html内容要如何

  • el-input 为什么登录加了键盘回车会报

    el-input 为什么登录加了键盘回车会报

  • node-cron设置定时

    node-cron设置定时

  • 安卓封装的webview,x5内核,网页里的

    安卓封装的webview,x5内核,网页里的

腾讯云代理商
海外云服务器