5.4. Конфигурация HTTP-запросов

При обращении к Веб серверу индексатор передает ему HTTP-запрос, который по умолчанию выглядит следующим образом:

  GET _относительный_урл_документа_ HTTP/1.1
  Host: _имя_хоста_с_которого_запрашивается_документ_
  Connection: Keep-Alive
  From: N/A
  User-Agent: Yandex.Server/_номер_версии_Yandex.Server_
  Accept: text/html _или_ text/plain
  Accept-Language: ru; q=1.0, *; q=0.01
  If-Modified-Since: _дата_модификации_при_последнем_индексировании_
Последний заголовок посылается при повторном индексировании, если документ уже был проиндексирован ранее, а в опциях настройки индексатора указано "переиндексировать, только если документ изменился".

Иногда требуется модифицировать посылаемые по умолчанию заголовки, или добавить новые заголовки. Так, например, для сайтов, требующих авторизации, HTTP-запрос должен содержать дополнительную информацию о полномочиях пользователя. Также бывает нужно использовать прокси-сервер или установить время задержки между запросами, чтобы не загружать веб-сервер.

Индексатор имеет гибкий механизм настройки HTTP-запросов. Эта настройка может быть различной для разных областей индексирования. Каждая настройка запоминается либо в отдельном конфигурационном файле, либо в секции <HttpOptions> конфигурационного файла индексатора, которая должна иметь идентифицирующий атрибут name. Путь к конфигурационному файлу или значение атрибута name указывается для каждой области индексирования в директиве Options секций IndexedArea конфигурационного файла индексатора.

Конфигурационный файл HTTP-запросов (или секция <HttpOptions>) состоит из необязательных директив Timeout, Delay и ProxyUrl и двух необязательных секций Headers и Authorization.

5.4.1. Директивы основной секции

Timeout

Максимальное время ожидания ответа Web-сервера в секундах.

Значение по умолчанию: 150

Delay

Время задержки перед запросом следующего документа в микросекундах. Директива необходима для уменьшения нагрузки на сервер, время индексирования при этом, естественно, увеличивается.

Значение по умолчанию: 0

ProxyUrl

Позволяет использовать в HTTP-запросе указанный прокси-сервер. Директива должна определять полный URL прокси-сервера, начинающийся с http, и содержащий номер порта, если он отличается от 80. Если указан прокси-сервер, запрос

      GET _относительный_урл_документа_ HTTP/1.1
      Host: _имя_хоста_с_которого_запрашивается_документ_
      
будет заменен на
      GET _абсолютный_урл_документа_ HTTP/1.1
      
и HTTP-соединение будет устанавливаться с прокси-сервером, а не хостом, на котором расположен документ. Прокси-серверы, требующие отдельной авторизации со стороны пользователя, не поддерживаются в данной версии.

Значение по умолчанию: не задан

5.4.2. Секция Headers

Позволяет задавать любые HTTP-заголовки в формате

  Имя: Значение
В этом примере будет добавлен HTTP-заголовок с именем Имя и значением Значение.

Правила хорошего тона при индексировании независимых ресурсов требуют задания HTTP-заголовков User-Agent, который содержит идентифицирующую информацию о программе-клиенте, пославшей запрос, и From, который должен содержать email-адрес администратора программы-клиента в формате, определенном в RFC 822. Если ключи User-Agent и/или From отсутствуют, будут посланы заголовки по умолчанию, указанные выше.

Кроме того, всегда будут посланы заголовки Connection и, если необходимо, If-Modified-Since, поэтому их не следует указывать в данной секции.

5.4.3. Секция Authorization

Носит вспомогательный характер и позволяет удобным способом добавлять HTTP-заголовок Authorization, обеспечивающий проверку полномочий клиента на доступ к данным по схеме BASIC. В секцию входят следующие директивы:

UserName

имя пользователя

UserPassword

пароль пользователя

Имя и пароль кодируются по base64. Например, комбинация следующих ключей в секции Authorization

  <Authorization>
      UserName: yandex
      UserPassword: asdf12345
  </Authorization>
эквивалентна заданию директивы
  <Headers>
      Authorization: Basic eXNpdGU6YXNkZjEyMzQ1
  </Headers>
в секции Headers и приведет к включению соответствующего HTTP-заголовка.

5.4.4. Пример конфигурации HTTP-запросов

Пример 5-3. Конфигурация HTTP-запросов

Ниже приведен отрывок из конфигурационного файла индексатора, задающий конфигурацию HTTP-запросов при индексировании хоста www.host.ru.

  <IndexedArea>
      HttpPrefix www.host.ru
      Options GetHttp:myhttp
  </IndexedArea>
  
  <HttpOptions name="myhttp">
      Timeout: 150
      Delay: 0
      ProxyUrl: http://proxy.host.ru:8080
      <Authorization>
          UserName: yandex
          UserPassword: asdf12345
      </Authorization>
      <Headers>
         User-Agent: Yandex.Server.MyHost/3.0
         From: admin@host.ru
         Accept-Language: ru, *;q=0.1
         MyHeader: TestStroka
      </Headers>
  </HttpOptions>

В приведенном фрагменте все директивы находятся в одном файле. Такую же конфигурацию можно получить, задав в основном конфигурационном файле индексатора директивы

  <IndexedArea>
      HttpPrefix www.host.ru
      Options    http:myhttp.cfg
  </IndexedArea>
и создав дополнительный конфигурационный файл myhttp.cfg следующего содержания
  Timeout: 150
  Delay: 0
  ProxyUrl: http://proxy.host.ru:8080
  <Authorization>
      UserName: yandex
      UserPassword: asdf12345
  </Authorization>
  <Headers>
     User-Agent: Yandex.Server.MyHost/3.0
     From: admin@host.ru
     Accept-Language: ru, *;q=0.1
     MyHeader: TestStroka
  </Headers>

Copyright © 1997 – 2005 «Яндекс»