2

Я пишу php-приложение, которое использует CURL для очистки данных с веб-сайтов. Но время загрузки сайта с помощью curl очень и очень медленное. Гораздо медленнее, чем время, необходимое для его загрузки в Chrome, хотя Chrome загружает много других вещей, таких как электронные таблицы и изображения, а приложение php - нет.

В любом случае, я читал, что у curl могут быть проблемы с поиском DNS, поэтому доступ по IP может быть намного быстрее.

Но я не уверен, как это сделать.

Давайте возьмем Google для примера. Я могу открыть командную строку и выполнить команду «ping www.google.com». Он отвечает с:

Pinging www.google.com [74.125.232.114] with 32 bytes of data...

Так что тогда я могу использовать этот IP-адрес, который работает, но что, если я хотел бы получить доступ, например: www.google.com/doodles

Если я пытаюсь ввести этот адрес при пинге, он говорит, что не может найти хост, и выполнение http://74.125.232.114/doodles тоже не работает.

(Error: Not Found The requested URL /doodles was not found on this server.)

Так как мне получить доступ к этому по IP?

3 ответа3

2

Вы пытаетесь получить доступ к веб-сайтам на базе VirtualHost по IP. Проблема в том, что curl не использует имя хоста, к которому он пытается получить доступ к веб-серверу, поэтому веб-сервер не знает, какую страницу обслуживать (google.com также может размещать gmail.com, но не знает, что делать. дать вам, потому что локон не спрашивает).

Чтобы позволить curl использовать имя хоста, вы можете изменить файл /etc/hosts со следующей информацией:

74.125.232.114 google.com

(В Windows вы можете найти этот файл в C:\Windows\System32\Drivers\etc\hosts)

Если вы позволите curl выполнить запрос к example.com, ваша ОС найдет example.com в /etc/hosts и даже не попытается найти DNS, что будет намного быстрее.


При этом было бы намного лучше, если бы вы исправили свои настройки DNS. Вы пытались изменить файл /etc/resolv.conf с помощью серверов имен вашего провайдера (или Google Public DNS)

nameserver 8.8.8.8
nameserver 8.8.4.4
1

Если время отклика DNS слишком велико, вы должны исправить настройки DNS в своей сети. Загляните в /etc/resolv.conf и проверьте, доступны ли перечисленные здесь серверы имен. Если нет, добавьте работающий DNS-сервер (сверху). Вы можете использовать DNS-сервер Google, например:

nameserver 8.8.8.8

Если по какой-либо причине вам нужны медленные DNS-серверы, это может быть связано с тем, что ваше приложение использует внутренние DNS-имена, которые недоступны в Интернете, тогда вы все равно можете изменить файл /etc/hosts и добавить имя хоста для 74.125.232.114 там:

74.125.232.114 www.google.com

Имея общие настройки в /etc/nsswitch.conf , система будет использовать /etc/hosts перед выполнением запроса DNS.

0

используйте -L, чтобы перейти с перенаправления (как curl www.google.com говорит, что страница была перемещена),

и уже упоминалось, что при выполнении этого через IP заголовок Host не заполняется.

Хорошо, тогда как насчет указания заголовка хоста.

curl -L -H "Хост: www.google.com" 173.194.34.115/doodles

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .