Php: получить исходный код html с помощью cURL

Как я могу получить исходный код html http://www.example-webpage.com/file.html без использования file_get_contents()?

Мне нужно это знать, потому что на некоторых веб-хостах allow_url_fopen отключен, поэтому вы не можете использовать file_get_contents(). Возможно ли получить источник html файла с помощью cURL (если включена поддержка cURL)? Если да, то как? Спасибо.

Ответы

Ответ 1

Попробуйте следующее:

$ch = curl_init("http://www.example-webpage.com/file.html");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$content = curl_exec($ch);
curl_close($ch);

Я бы рекомендовал это только для небольших файлов. Большие файлы читаются в целом и могут вызвать ошибку памяти.

edit: после некоторого обсуждения комментариев мы выяснили, что проблема заключается в том, что servercouldnt разрешает имя хоста, а страница дополнительно содержит https-ресурс, поэтому здесь появляется ваше временное решение (до тех пор, пока ваш serveradmin не исправляет разрешение имен).

то, что я сделал, просто pinging graph.facebook.com, чтобы увидеть ip-адрес, заменить имя хоста на ip-адрес и вместо этого дать заголовок вручную. это, тем не менее, делает ssl-сертификат недействительным, поэтому нам нужно подавить проверку сверстников

//$url = "https://graph.facebook.com/19165649929?fields=name";
$url = "https://66.220.146.224/19165649929?fields=name";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: graph.facebook.com'));
$output = curl_exec($ch);
curl_close($ch); 

Имейте в виду, что адрес ip может измениться, и это источник eror. вы должны также выполнять некоторую обработку ошибок с помощью curl_error();

Ответ 3

Попробуйте http://php.net/manual/en/curl.examples-basic.php:)

<?php

$ch = curl_init("http://www.example.com/");
$fp = fopen("example_homepage.txt", "w");

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

$output = curl_exec($ch);
curl_close($ch);
fclose($fp);
?>

Как говорится в документации:

Основная идея функций cURL заключается в том, что вы инициализируете сеанс cURL с помощью curl_init(),, тогда вы можете установить все свои параметры для передачи через curl_setopt(), затем вы можете выполнить сеанс с curl_exec(), а затем вы завершите сеанс, используя curl_close().