function request($host)
{
    $url = parse_url($host);
    $port = !empty($url['port']) ? $url['port'] : 80;
    $query = !empty($url['query']) ? sprintf('?%s', $url['query']) : null;
    $path = !empty($url['path']) ? $url['path'] : '/index.php';
    $request = $path . $query;
    $fp = fsockopen($url['host'], $port, $errno, $errstr, 30);
    $out = null;
    if (!$fp) {
        echo "$errstr ($errno)\n";
    } else {
        $out .= sprintf("GET %s HTTP/1.1%s", $request, chr(10));
        $out .= "User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36\r\n";
        $out .= sprintf("Host:%s%s", $url['host'], "\r\n");
        $out .= "Connection: Close\r\n\r\n";
        fwrite($fp, $out);
        $data = stream_get_contents($fp);
        fclose($fp);
    }
    $pos = strpos($data, "\r\n\r\n");
    $head = substr($data, 0, $pos); //http head
    $status = substr($head, 0, strpos($head, "\r\n")); //http status line
    $body = substr($data, $pos + 4, strlen($data) - ($pos + 4)); //page body
    if (preg_match("/^HTTP\/\d\.\d\s([\d]+)\s.*$/", $status, $matches)) {
        if (intval($matches[1]) / 100 == 2) {
            return unchunk($body);
        } else {
            return false;
        }
    } else {
        return false;
    }
    /** preg_match('/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/i', $data, $html);*/
}
function unchunk($result)
{
    return preg_replace_callback('/(?:(?:\r\n|\n)|^)([0-9A-F]+)(?:\r\n|\n){1,2}(.*?)' .
        '((?:\r\n|\n)(?:[0-9A-F]+(?:\r\n|\n))|$)/si', create_function('$matches',
        'return hexdec($matches[1]) == strlen($matches[2]) ? $matches[2] : $matches[0];'),
        $result);
}

 

posted on 2013-12-10 17:08  FreeSpider  阅读(522)  评论(0编辑  收藏  举报