2010-05-31 4 views
4

Мне нужно получить содержимое веб-страницы, я не могу использовать Curl, поскольку он не включен. Я попробовал код ниже, но он не работает.Как получить содержимое веб-страницы без CURL?

$opts = array(
    'http'=>array(
    'method'=>"GET", 
    'header'=>"Accept-language: en\r\n" . 
       "Cookie: foo=bar\r\n" 
) 
); 

$context = stream_context_create($opts); 

$fp = fopen($_GET['url'], 'r', false, $context); 
if($fp) 
fpassthru($fp); 
fclose($fp); 
exit; 

код приводит к ошибке

Warning: fopen(http://www.google.com/search?&q=site:www.myspace.com+-intitle:MySpaceTV+%22Todd Terje%22) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request 

ответ

4

Вы заметили, что в вашем URL-адресе есть АКТУАЛЬНОЕ пространство между Тоддом и Терье? Это может вызвать вашу проблему, поскольку браузер обычно кодирует ее до + или %20.

+0

Что я могу сказать «Вы правила»: P Eagle eye;). Да, эта проблема была! – Arshdeep

+7

Чтобы отметить этот ответ как «Вы правила», нажмите зеленую отметку слева. – Douglas

3

Вы можете использовать функцию file_get_contents для этого:

$content = file_get_contents('url/filepath here'); 
echo $content; 

Примечание: Если вы хотите прочитать из безопасного протокола, например, https, убедитесь, что у вас есть openssl ex напряжение от php.ini.

Update:

Из того, что вы говорите, я подозреваю, что у вас есть allow_url_fopen настройки выключены из файла php.ini, вам нужно повернуть, что, чтобы иметь возможность читать из URLs.

Update 2:

Похоже вы не указав правильный URL, я только что проверил, например, если вы просто положить в www.google.com, он отлично работает:

$url = 'http://www.google.com'; 
$content = file_get_contents($url); 
echo $content; 
+0

Да я уже пробовал, ERROR "Warning: file_get_contents () [function.file- get-contents]: не удалось открыть поток: HTTP-запрос не удался! HTTP/1.0 400 Bad Request « – Arshdeep

+0

@Arsheep: см. мой обновленный ответ, пожалуйста. – Sarfraz

+0

Хорошо, что я видел, а не защищенный url "и allow_url_fopen = On" Я проверил – Arshdeep

1

Вы можете на самом деле укажите URL вместо имени файла в file_get_contents.

+0

Я знаю, что я уже пробовал, ERROR «Предупреждение: file_get_contents () [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не удался! HTTP/1.0 400 Bad Request« – Arshdeep

0

использовать sniffer как WireShark, чтобы получить содержимое фактического запроса браузера. Затем скопируйте его и удалите по одному, вскоре вы получите минимально необходимые заголовки.

4

вы можете использовать старомодный код, как:

$CRLF = "\r\n"; 
$hostname = "www.something.com"; 

$headers[] = "GET ".$_GET['url']." HTTP/1.1"; 
$headers[] = "Host: ".$hostname; 
$headers[] = "Accept-language: en"; 
$headers[] = "Cookie: foo=bar"; 
$headers[] = ""; 

$remote = fsockopen($hostname, 80, $errno, $errstr, 5); 
// a pinch of error handling here 

fwrite($remote, implode($CRLF, $headers).$CRLF); 

$response = ''; 

while (! feof($remote)) 
{ 
    // Get 1K from buffer 
    $response .= fread($remote, 1024); 
} 

fclose($remote); 

Update: Хорошая вещь об этом решении является то, что он не опирается на FOPEN оберток.

-1
php file_get_contents() function 

nadeausoftware.com/articles/2007/07/php_tip_how_get_web_page_using_fopen_wrappers

/** 
* Get a web file (HTML, XHTML, XML, image, etc.) from a URL. Return an 
* array containing the HTTP server response header fields and content. 
*/ 
function get_web_page($url) 
{ 
    $options = array(
     CURLOPT_RETURNTRANSFER => true,  // return web page 
     CURLOPT_HEADER   => false, // don't return headers 
     CURLOPT_FOLLOWLOCATION => true,  // follow redirects 
     CURLOPT_ENCODING  => "",  // handle all encodings 
     CURLOPT_USERAGENT  => "spider", // who am i 
     CURLOPT_AUTOREFERER => true,  // set referer on redirect 
     CURLOPT_CONNECTTIMEOUT => 120,  // timeout on connect 
     CURLOPT_TIMEOUT  => 120,  // timeout on response 
     CURLOPT_MAXREDIRS  => 10,  // stop after 10 redirects 
    ); 

    $ch  = curl_init($url); 
    curl_setopt_array($ch, $options); 
    $content = curl_exec($ch); 
    $err  = curl_errno($ch); 
    $errmsg = curl_error($ch); 
    $header = curl_getinfo($ch); 
    curl_close($ch); 

    $header['errno'] = $err; 
    $header['errmsg'] = $errmsg; 
    $header['content'] = $content; 
    return $header; 
} 

ТНХ: http://nadeausoftware.com/articles/2007/06/php_tip_how_get_web_page_using_curl

+0

WOW, я думаю, вы забудете вопрос «Как получить содержимое веб-страницы без CURL?» – Arshdeep

+0

Я проигнорировал, потому что OP не хотел использовать CURL. Однако, если вы удалите бит curl и включите некоторый пример кода, не использующий CURL, я, вероятно, могу вас повернуть. –

Смежные вопросы