- Получение исходного кода страницы
- Как получить HTML-код веб-страницы в PHP?
- Как получить контент веб-страницы, если по ссылке с именем хоста не получилось
- 1. Парсер для получения контента по ссылкам
- 2. Попытка решения в лоб за счет «имитации» браузера доп. заголовками в запросе
- 2.1. Заголовок с Host
- 3. Изучение веб-страницы, «проблемной» для парсера
- 4. ПО для сбора контента с веб-сайтов
- 5. Возврат к мысли про ссылку с IP-адресом сервера
- 6. Выводы и решение
Получение исходного кода страницы
в чем проблема?
может есть другие способа получения исходного кода без данной ошибки?
может ошибка из-за https ?
Добавлено через 6 минут
$url = "https://gamenet.ru/users/strekosat/games/"; $html_code = file_get_contents($url); $html_code; ?>
Просмотр исходного кода страницы
Возможно ли узнать, просматривает ли пользователь исходный код страницы, черз php
Получение кода страницы и запись в файл. (Ну не выходит. )
Пытаюсь получить код страницы и записать его в файл. Перепробовал уже кучу функций. Почему не.
Безопасность исходного кода
Доброе время суток. Думаю, что подобные темы в разделе поднимаются не редко, однако информация.
Просмотр исходного кода в браузерах на основе Chromium
Я делаю небольшой сайт, используя подключаемые блоки PHP. Я заметил в браузерах Google Chrome и.
Сообщение от turissssst
$url = "https://gamenet.ru/users/strekosat/games/"; $handle = curl_init(); curl_setopt($handle, CURLOPT_URL, $url); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); $homepage = curl_exec($handle); curl_close($handle); echo $homepage."dddd\r\n"; ?>
возвращает пустую страницу, подумал что это из-за того что скрипт на локальном сервере, поместил скрипт на хостинг но ничего не изменилось.
P.S.
dddd для того что бы убедится что скрипт хоть что-то возвращает
Добавлено через 1 час 45 минут
использую usb webserver
Добавлено через 13 часов 50 минут
пожалуйста помогите
Да, похоже что это из-за https.
tolimadokara, можно это обойти?
Добавлено через 4 минуты
там пример пост запроса, боюсь что если я начну его переделывать под гет то ошибок не избежать.
не могли бы вы мне помочь с этим?
просто сделать что бы мне возвращало исходный код страницы
Добавлено через 7 часов 21 минуту
Может попробовать с применением джава скриптов?
1 2 3 4 5 6 7 8 9 10 11 12
$fp = fsockopen ("ssl:gamenet.ru", 443, $errno, $errstr, 30); if (!$fp) { echo $errstr ($errno)."
\n"; } else { fputs ($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\n\r\n"); while (!feof($fp)) { echo fgets ($fp,128); } fclose ($fp); } ?>
пробовал так но не помогло
ошибка
Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: No such host is known. in F:\ProgramFiles\DOWNLOAD2\www(1)\www\root\ideone.php on line 2
Warning: fsockopen(): unable to connect to ssl:gamenet.ru:443 (php_network_getaddresses: getaddrinfo failed: No such host is known. ) in F:\ProgramFiles\DOWNLOAD2\www(1)\www\root\ideone.php on line 2
Fatal error: Call to undefined function php_network_getaddresses: getaddrinfo failed: No such host is known. () in F:\ProgramFiles\DOWNLOAD2\www(1)\www\root\ideone.php on line 4
использую локальный сервер
Сообщение от turissssst
значит моя ошибка в этом? мне надо что бы скрипт вывел мне исходный код страницы но способ с curl и простой получения исходного кода страницы не работают
Как получить HTML-код веб-страницы в PHP?
то я хочу, чтобы HTML-код страницы был подан. Я хочу получить этот код HTML и сохранить его в переменной PHP.
Если ваш PHP-сервер разрешает обертку url fopen, тогда самый простой способ:
$html = file_get_contents('http://stackoverflow.com/questions/ask');
Если вам нужно больше контроля, вы должны посмотреть на функции cURL :
$c = curl_init('http://stackoverflow.com/questions/ask'); curl_setopt($c, CURLOPT_RETURNTRANSFER, true); //curl_setopt(. other options you want. ) $html = curl_exec($c); if (curl_error($c)) die(curl_error($c)); // Get the status code $status = curl_getinfo($c, CURLINFO_HTTP_CODE); curl_close($c);
Кроме того, если вы хотите каким-либо образом манипулировать извлеченной страницей, вам может понадобиться попробовать парсер php DOM. Я нахожу PHP Simple HTML DOM Parser очень простым в использовании.
Вы можете проверить библиотеки YQL от Yahoo: http://developer.yahoo.com/yql
Задача под рукой так же проста, как и
select * from html where url = 'http://stackoverflow.com/questions/ask'
Вы можете попробовать это на консоли: http://developer.yahoo.com/yql/console (требуется вход в систему)
Простой способ: используйте file_get_contents() :
$page = file_get_contents('http://stackoverflow.com/questions/ask');
Обратите внимание, что allow_url_fopen должен быть true в php.ini чтобы иметь возможность использовать обертки fopen с поддержкой URL.
Более продвинутый способ. Если вы не можете изменить свою конфигурацию PHP, allow_url_fopen по умолчанию false , и если ext / curl установлен, используйте библиотеку cURL для подключения к желаемой странице.
посмотрите на эту функцию:
include_once('simple_html_dom.php'); $url="http://stackoverflow.com/questions/ask"; $html = file_get_html($url);
Вы можете получить весь HTML-код в виде массива (проанализированная форма), используя этот код. Загрузите файл ‘simple_html_dom.php’ здесь http://sourceforge.net/projects/simplehtmldom/files/simple_html_dom.php/download
вы можете использовать file_get_contents, если вы хотите сохранить источник как переменную, однако завиток лучше.
$url = file_get_contents('http://example.com'); echo $url;
это решение отобразит веб-страницу на вашем сайте. Однако завиток – лучший вариант.
Вот два разных простых способа получить контент из URL :
Включите Allow_url_include с вашего хостинга (php.ini или где-нибудь)
Включить php_curl, php_imap и php_openssl
$variableee = get_dataa('http://example.com'); echo $variableee; ?>
Как получить контент веб-страницы, если по ссылке с именем хоста не получилось
Простым языком об использовании PHP с cURL на одном примере сайта с JavaScript-защитой.
1. Парсер для получения контента по ссылкам
Задача парсера тривиальная — агрегатор новостей: сбор контента с новостных сайтов.
На входе: файл с URL-ссылками на статьи для сбора.
Веб-интерфейс для администратора: php-страница с кнопкой для запуска скрипта парсера.
Скрипт: использование cURL — с минимальным набором опций.
function cURL_get_content($url)
- заходит на страницу запуска скрипта,
- нажимает кнопку запуска. 2) Скрипт:
- обходит (в цикле) массив ссылок на сайты,
- собирает контент статей,
- формирует веб-страницы по заданному шаблону.
Проблема: наткнувшись на интересную статью с сайта о недвижимости (Домофонд), попытался добавить ее в файл ссылок для сбора контента.
Контент со страницы не собрался: 403 Forbidden.
Спойлер: если сразу интересно найденное решение, то можно переходить к заключению, пропустив бесплодные попытки поиска.
2. Попытка решения в лоб за счет «имитации» браузера доп. заголовками в запросе
В поисках сначала натолкнулся на статьи о том, что некоторые сайты ставят защиту от ботов (чем и является парсер для сбора контента). Например, при использовании cURL надо «оживлять» запрос заголовками, что я и делал, но безуспешно — проиллюстрирую одной из попыток.
function cURL_get_content($url)< $url_1 = "https://www.domofond.ru/"; $url_2 = $url; $headers = array( 'GET ' . $url_2 . ' HTTP/1.1', "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "Accept-Encoding: gzip, deflate", "Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7", "Host: domofond.ru", "Referer: domofond.ru", "Upgrade-Insecure-Requests: 1", 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36', 'Cookie: dfuid=5e0dd723-40e6-46cf-a2f1-1db784e320e1; _ga=GA1.2.140590976.1641893876; rrpvid=42725831313485; rcuid=6166ad1a101fb8000139a8a9; _ym_uid=1641893879540019262; _ym_d=1641893879; __gads=ID=00752b7382f51452:T=1641893879:S=ALNI_ManEsFfeviPUR29VUUnBx_DcgsAxQ; _gid=GA1.2.589118605.1642400326; _ym_visorc=w; _ym_isad=2; cto_bundle=ellcGV9VT0c4Q0Vrd2E3dEhtVmhJNk1Ic20xaHNnNXhuSiUyRiUyQiUyRnZYMlFEV0tnNExTWmhQUjJJVzdUOHdkNmlKdnh1aEZtUWMzQ0dxV25Nb3hrYktOeUpEMjZLZ0xLTFElMkZDekxiSkh6elEyOFM0UHVZZ2xHTklpQ2RJOTRkb1Q3QUNTODRlR0hnU0Z1MEFkeDBtNTc1MVozdjVndyUzRCUzRA' ); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); . >
Пример запроса с заголовками:
GET /statya/kolichestvo_dolgostroev_uvelichilos_v_vosemnadtsati_regionah_rf_za_2021_god/102082 HTTP/1.1 Host: www.domofond.ru User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Accept: . +куки +смотрел/добавлял заголовки, отправленные в браузере
2.1. Заголовок с Host
Хотя при добавлении хост-заголовка все же возникла одна из мыслей.
Если значение заголовка менялось с «Host: www.domofond.ru» на «Host: domofond.ru» (без www.), то появлялась ошибка: 421 Misdirected Request.
Поэтому в браузере я вручную открывал страницу с/без www — естественно, визуально для меня ничего не менялось.
Перенаправление срабатывало нормально, но потом я еще решил изменить и протокол, чтобы проверить, какой будет редирект.
Сменив в браузере ссылку с https:// на http:// (с/без www) получал нормальный редирект на главное зеркало (https://www.) с нормальным отображением статьи.
При этом вместо статьи отобразилась та же ошибка: 421 Misdirected Request.
3. Изучение веб-страницы, «проблемной» для парсера
Продолжив поиски по теме защиты на сайтах от ботов, столкнулся с выполнением JavaScript-кода на страницах для этой цели.
Сразу скажу, что в браузере отключил выполнение JavaScript-сценариев, но страница продолжила отображаться нормально.
Хотя при изучении кода проблемной страницы смутил следующий скрипт, включающий в виде JSON-блока контент статьи.
4. ПО для сбора контента с веб-сайтов
В ходе исследований попадались статьи на «безголовые» браузеры, среды наподобие селениума и т.п.
Предлагалась имитация действий пользователя, установка тайм-аутов при обращении к сайту для снижения нагрузки и т.д.
Но для решения задач по парсингу одной-двух ссылок, а не многопоточного скачивания всего сайта это не подходило.
Глубоко в этом направлении не разбирался и не копал.
5. Возврат к мысли про ссылку с IP-адресом сервера
Пришлось вернуться к начальному вопросу: как получить контент веб-страницы, если по ссылке с именем хоста не получилось.
В ответ получил содержимое страницы.
6. Выводы и решение
В чем проблема — до конца непонятно. Закроет ли собственник сайта (Домофонд) эту дыру и сможет ли это вообще сделать — неясно.
Но в статье приведено достаточно простое решение и оно работает, а на просторах интернета с такой легкой подсказкой я не сталкивался.
В решении дополнил скрипт методом gethostbyname, чтобы получать IPv4-адрес, соответствующий переданному имени хоста.
Парсер для получения контента по ссылке на входе имеет тот же набор URL-ссылок, но теперь обращается по IP-адресам серверов, что не мешает его работе в сборе данных.