Будет ли отправка HTTP-заголовка с помощью Accept: text / html только загрузки текста со страницы? - PullRequest
1 голос
/ 03 августа 2010

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

Ответы [ 3 ]

3 голосов
/ 03 августа 2010

Да, с помощью Accept: text/html вы должны получать только HTML в качестве правильных ответов. По крайней мере, так должно быть.

Но на практике существует огромная разница между стандартами и фактическими реализациями. И правильное согласование контента (вот для чего Accept) - это одна из вещей, которые едва поддерживаются.

2 голосов
/ 03 августа 2010

Вы на правильном пути к решению проблемы.

Я не уверен, сколько вы уже знаете о HTTP-заголовках, но в основном HTTP-заголовок - это просто форматирование строки для веб-сервера - он следует протоколу - и довольно прост в этом аспекте. Вы пишете запрос и получаете ответ. Запросы похожи на то, что вы видите в плагине Firefox LiveHTTPHeaders на https://addons.mozilla.org/en-US/firefox/addon/3829/.

Я написал небольшое сообщение на моем сайте http://blog.gnucom.cc/2010/write-http-request-to-web-server-with-php/, в котором показано, как вы можете написать запрос на веб-сервер, а затем прочитать ответ. Если вы принимаете только текст / html, вы принимаете только подмножество того, что доступно в Интернете (так что да, это до некоторой степени «оптимизирует» ваш скрипт). Обратите внимание, что этот пример действительно низкого уровня, и если вы собираетесь написать паука, вы можете использовать существующую библиотеку, такую ​​как cURL, или любые другие инструменты, предлагаемые языком реализации.

1 голос
/ 20 мая 2014

HTML-страница содержит только текст и некоторую разметку тега.

Изображения, сценарии и таблицы стилей (обычно) являются внешними файлами, на которые ссылается HTML-разметка. Это означает, что если вы запросите страницу, вы уже получите только текст (без изображений и прочего).

Поскольку вы пишете сканер, убедитесь, что он не следует URL-адресам из изображений, сценариев или таблиц стилей.

Я не уверен на 100%, но я верю, что GET /foobar.png вернет изображение, даже если вы отправите Accept: text/html. По этой причине я считаю, что вам следует просто отфильтровать, какие URL вы сканируете.

Кроме того, вы можете попытаться прочитать заголовки ответа в сканере и закрыть соединение, прежде чем читать тело, если Content-Type не text/html. Это может быть полезно для нежелательных больших файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...