首页 > php框架 > php中fsockopen采集网页内容实例

php中fsockopen采集网页内容实例

fsockopen是php中一个比较实用的函数了,下面我来介绍利用fsockopen函数来采集网页的程序,有需要的朋友可参考。

用法

int fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]);

一个采集网页实例

<?php
function get_url($url, $cookie = false) {
    $url = parse_url($url);
    $query = $url[path] . "?" . $url[query];
    echo "Query:" . $query;
    $fp = fsockopen($url[host], $url[port] ? $url[port] : 80, $errno, $errstr, 30);
    if (!$fp) {
        return false;
    } else {
        $request = "GET $query HTTP/1.1rn";
        $request.= "Host: $url[host]rn";
        $request.= "Connection: Closern";
        if ($cookie) $request.= "Cookie:   $cookien";
        $request.= "rn";
        fwrite($fp, $request);
        while (!@feof($fp)) {
            $result.= @fgets($fp, 1024);
        }
        fclose($fp);
        return $result;
    }
}
//获取url的html部分,去掉header
function GetUrlHTML($url, $cookie = false) {
    $rowdata = get_url($url, $cookie);
    if ($rowdata) {
        $body = stristr($rowdata, "rnrn");
        $body = substr($body, 4, strlen($body));
        return $body;
    }
    return false;
}
?>

被禁用后的解决方法

服务器同时禁用了fsockopen pfsockopen,那么用其他函数代替,如stream_socket_client()。注意:stream_socket_client()和fsockopen()的参数不同。

fsockopen( 替换为 stream_socket_client( ,然后,将原fsockopen函数中的端口参数"80"删掉,并加到$host。

$fp = fsockopen($host, 80, $errno, $errstr, 30);

$fp = fsockopen($host, $port, $errno, $errstr, $connection_timeout);

修改后:

$fp = stream_socket_client("tcp://".$host."80", $errno, $errstr, 30);

$fp = stream_socket_client("tcp://".$host.":".$port, $errno, $errstr, $connection_timeout);


本文地址:http://www.phprm.com/frame/php1005356.html

转载随意,但请附上文章地址:-)

标签:none

发表留言