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); }