четверг, 11 октября 2012 г.

httpbin: HTTP Request & Response Service

httpbin - это python-сервер, который возвращает стандартные ответы на запросы клиента. 
Часто требуется проверить тот или иной функционал вашего сетевого приложения. httpbin может пригодиться для тестирования корректной работы HTTP-клиента со стандартными ответами HTTP-сервера.
Ссылка на сервис, развёрнутый в интернете: http://httpbin.org/
Ссылка на скачивание дистрибутива: https://github.com/kennethreitz/httpbin
Ссылка на страничку автора: http://kennethreitz.com/announcing-httpbinorg.html

Для установки требуется python 2.7. Находясь в директории с распакованным httpbin наберите:
python setup.py install

Возможно, вам придется установить библиотеку pip или distribute (easy_install). Библиотеки под Windows можно скачать тут: http://www.lfd.uci.edu/~gohlke/pythonlibs/
httpbin использует микрофреймворк для создания web-приложений Flask, который также требуется установить.

После установки httpbin и Flask для запуска тестов самодиагностики наберите в консоли:
python.exe test_httpbin.py

Если возникнет ошибка, то будут отображены другие библиотеки python, которые нужно установить отдельно, например, используя easy_install. Список требуемых библиотек находится в каталоге httpbin в файле requirements.txt. После полной установки httpbin и всех зависимостей, тест самодиагностики пройдёт:


Для отображения возможных опций работы httpbin наберите в консоли:
python.exe manage.py

Выйдет список опций:


Для запуска сервиса httpbin наберите в консоли:
python.exe manage.py runserver

После успешного запуска можно будет обратиться к сервису по локальному адресу: http://127.0.0.1:5000/


Сама страничка сервиса представляет собой набор ссылок с примерами запросов:


Основные библиотеки httpbin:
  • httpbin/core.py - ядро программы с основными реализованными функциями httpbin, доступные с главной странички сервиса. Шаблоны для сервиса находятся в каталоге httpbin/templates.
  • httpbin/helpers.py - вспомогательные функции для обработки клиентских-запросов.
  • httpbin/filters.py - используемые декораторы функций.
  • httpbin/runner.py - command-line runner.

Наиболее интересные возможности:
  1. Получение любого значения поля Status Code в области Headers. Для этого достаточно обратиться по ссылке вида http://127.0.0.1:5000/status/NUMBER, где NUMBER - произвольное числовое значение, которое нужно получить в качестве статус-кода в ответ на запрос клиента.
  2. Получение произвольных Headers в ответ, передав их параметром в запросе вида http://127.0.0.1:5000/response-headers?HEADERS, где HEADERS - заголовки, которые нужно получить в ответ. Например, вместо HEADERS можно подставить строку: Content-Type=text/plain;%20charset=UTF-8&Server=httpbin
  3. Получение в ответ произвольных cookie, указав ключи и их значения параметром в запросе вида http://127.0.0.1:5000/cookies/set?COOKIE, где COOKIE - ключи и значения, которые нужно получить в ответ. Например, вместо COOKIE можно подставить строку: k1=v1&k2=v2
  4. Возможно обратиться к страничкам, защищенным HTTP Basic Auth и HTTP Digest Auth. По умолчанию, логин user, пароль passwd.
  5. Имитация работы медленного сервера, от которого приходит ответ через указанное время задержки. Для этого нужно обратиться по ссылке вида http://127.0.0.1:5000/delay/DELAY, где DELAY - время задержки ответа в секундах.
  6. Возможно получить ответ после указанного числа локальных редиректов. Для этого нужно обратиться по ссылке вида http://127.0.0.1:5000/relative-redirect/NUM, где NUM - требуемое количество редиректов.
  7. Работа с файлом robots.txt. Получить настройки доступа по умолчанию можно обратившись по ссылке http://127.0.0.1:5000/robots.txt, а проверить, что нет доступа к заблокированному правилами robots.txt объекту можно по ссылке http://127.0.0.1:5000/deny.
  8. Отображение произвольной HTML-странички в ответ на запрос по ссылке http://127.0.0.1:5000/html. Содержимое странички по умолчанию: httpbin/templates/moby.html. Её содержимое можно заменить на своё, либо указать другую страничку в функции view_html_page(), находящейся в библиотеке httpbin/core.py.
  9. Получение в ответ потока с указанным числом JSON-сообщений. Для этого нужно обратиться по ссылке вида http://127.0.0.1:5000/stream/LINES, где LINES - требуемое количество сообщений. По умолчанию, максимальное число сообщений ограничено 100. Его можно изменить в библиотеке httpbin/core.py, отредактировав функцию stream_n_messages(n).
  10. Формирование GETPOSTPUTDELETE запросов при переходе по соответствующим ссылкам.
  11. Возможно сформировать запрос со значением поля Accept-Encoding: gzip,deflate,sdch в области Headers и получить в ответ gzip-encoded данные.
  12. Получение значения поля User-Agent, передаваемого клиентом. Для этого достаточно обратиться по ссылке вида http://127.0.0.1:5000/user-agent.