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) "; } 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 "; $out .= sprintf("Host:%s%s", $url['host'], " "); $out .= "Connection: Close "; fwrite($fp, $out); $data = stream_get_contents($fp); fclose($fp); } $pos = strpos($data, " "); $head = substr($data, 0, $pos); //http head $status = substr($head, 0, strpos($head, " ")); //http status line $body = substr($data, $pos + 4, strlen($data) - ($pos + 4)); //page body if (preg_match("/^HTTP/d.ds([d]+)s.*$/", $status, $matches)) { if (intval($matches[1]) / 100 == 2) { return unchunk($body); } else { return false; } } else { return false; } /** preg_match('/<s*(S+)(s[^>]*)?>[sS]*<s*/1s*>/i', $data, $html);*/ }
function unchunk($result) { return preg_replace_callback('/(?:(?: | )|^)([0-9A-F]+)(?: | ){1,2}(.*?)' . '((?: | )(?:[0-9A-F]+(?: | ))|$)/si', create_function('$matches', 'return hexdec($matches[1]) == strlen($matches[2]) ? $matches[2] : $matches[0];'), $result); }