Получить код состояния HTTP (HTTP status code)

Код состояния HTTP — это возвращенный веб сервером результат выполнения запроса (всё ок, ошибка, редирект, и т.д.)
Подробнее о кодах состояния (и их допустимых значениях) можно почитать в Википедии

При парсинге, часто требуется получить значение кода состояния, — например, в задачах SEO, когда требуется проверить список URL на наличие недоступных страниц, или редиректов.
Например, получение кода состояния используется для проверки проиндексированных страниц из Яндекс.Вебмастера

Задача осложняется тем, что при загрузке одной страницы, сервер может возвращать НЕСКОЛЬКО разных значений кода состояния, — так, например, сначала может быть код ответа 301 (редирект), а потом 200 (всё ок), так как, по факту, выполняется последовательно 2 или более запросов.
Штатными средствами парсера для просмотра заголовков ответа сервера, мы видим только последний ответ сервера (код состояния 200, 403 или 404) — тот, который следует уже после редиректа.

Когда нам надо получить и первый код состояния (например, редирект 301 или 302), и последний (например, 200 или 404),
то в парсере следует использовать действие, выполняющее запрос с сохранением Cookies (только такие действия отключают автоматический авторедирект, выполняя все редиректы последовательно, чтобы записать Cookies при каждом из редиректов).

Таких действия в парсере всего три:

  • Загрузить страницу с приёмом Cookies
  • Авторизация на сайте
  • Отправить HTTP запрос и получить ответ сервера (если включена опция «Сохранять Cookies»)

После выполнению любого из этих действий, в парсере становятся доступны 3 переменные, содержащие информацию о кодах состояния:

  • FirstHttpStatusCode — код состояния исходный (при выполнении первого запроса)
  • LastHttpStatusCode — код состояния конечный (при выполнении последнего запроса, если их было несколько)
  • LastRedirectURL — URL страницы, на которую привёл последний из редиректов

 

Посмотрим на примере, когда переход по ссылке вызывает редирект:

Действие Параметр Значение
Загрузить страницу с приёмом Cookies URL  
Создать новый экземпляр WinHttpRequest нет
Кодировка веб-страницы  
Задать новое значение Новое значение Первый код состояния: %FirstHttpStatusCode%{NL}Последний код состояния: %LastHttpStatusCode%{NL}URL редиректа: %LastRedirectURL%
Сохранить результат в переменную  
Использовать новое значение да
Исходное значение   Результат
http://excelvba.ru/EducatedFool
 
Первый код состояния: 303
Последний код состояния: 200
URL редиректа: http://ExcelVBA.ru/about/author

 

Другой пример (где страница по ссылке доступна, никаких редиректов нет):

Действие Параметр Значение
Загрузить страницу с приёмом Cookies URL  
Создать новый экземпляр WinHttpRequest нет
Кодировка веб-страницы  
Задать новое значение Новое значение Первый код состояния: %FirstHttpStatusCode%{NL}Последний код состояния: %LastHttpStatusCode%{NL}URL редиректа: %LastRedirectURL%
Сохранить результат в переменную  
Использовать новое значение да
Исходное значение   Результат
http://excelvba.ru/programmes/Parser
 
Первый код состояния: 200
Последний код состояния: 200
URL редиректа: 

 

Если же мы используем для загрузки страницы действие, работающее без сохранения Cookies, — то мы НЕ получим информацию о редиректе:

Действие Параметр Значение
Загрузить ИСХОДНЫЙ КОД веб-страницы URL  
Кодировка веб-страницы  
Загружать все страницы результатов  
Кеширование  
Задать новое значение Новое значение Первый код состояния: %FirstHttpStatusCode%{NL}Последний код состояния: %LastHttpStatusCode%{NL}URL редиректа: %LastRedirectURL%
Сохранить результат в переменную  
Использовать новое значение да
Исходное значение   Результат
http://excelvba.ru/EducatedFool
 
Первый код состояния: 
Последний код состояния: 200
URL редиректа: 

 

Если же мы используем действие «Загрузить исходный код веб-страницы» с опцией загрузки «direct», то кодом последнего состояния будет текст ok или err, в зависимости от того, загрузилась страница, или нет:

Действие Параметр Значение
Загрузить ИСХОДНЫЙ КОД веб-страницы URL  
Кодировка веб-страницы direct
Загружать все страницы результатов  
Кеширование  
Задать новое значение Новое значение Первый код состояния: %FirstHttpStatusCode%{NL}Последний код состояния: %LastHttpStatusCode%{NL}URL редиректа: %LastRedirectURL%
Сохранить результат в переменную  
Использовать новое значение да
Исходное значение   Результат
http://excelvba.ru/
 
Первый код состояния: 
Последний код состояния: ok
URL редиректа: 

 

 

 

Действие Параметр Значение
Загрузить ИСХОДНЫЙ КОД веб-страницы URL  
Кодировка веб-страницы direct
Загружать все страницы результатов  
Кеширование  
Задать новое значение Новое значение Первый код состояния: %FirstHttpStatusCode%{NL}Последний код состояния: %LastHttpStatusCode%{NL}URL редиректа: %LastRedirectURL%
Сохранить результат в переменную  
Использовать новое значение да
Исходное значение   Результат
http://unavailable.domain/
 
Первый код состояния: 
Последний код состояния: err
URL редиректа: