http-console — это Node-модуль, который предоставляет интерфейс командной строки для выполнения HTTP-команд. Он отлично подходит для отладки и точного отслеживания того, что происходит с вашими HTTP-запросами, независимо от того, были ли они направлены на веб-сервер, веб-службу или даже сервер базы данных.
Установка
Для использования http-консоли вам необходимо установить Node. Если он не установлен, либо зайдите на сайт http://nodejs.org и загрузите установщик для вашей операционной системы, либо перейдите на вики-сайт Node, если вы хотите установить его через менеджер пакетов .
Далее установите http-консоль с помощью npm :
$> npm install http-console2 -g
Несколько вещей, чтобы отметить:
- На самом деле мы устанавливаем http-console2 , а не http-console . http-console2 — это ветвь http-console, но содержит исправление для ошибки, вызванной устареванием
require.paths
в новых версиях Node. Он публикуется в npm как http-console2, но после установки вы все равно запускаете его как http-console. -
Мы устанавливаем http-console2 с глобальным ключом
-g
. Это означает, что вы можете вызывать http-консоль из любой точки мира, так как она установлена в вашей папке$PATH
:$> type http-console http-console is /usr/local/bin/http-console
Чтобы начать использовать http-консоль, мы просто передаем ему URL и порт того, к чему мы хотим подключиться, и начинаем выдавать команды HTTP.
Говоря HTTP
Давайте подключимся к серверу и выдадим несколько команд. Начнем с простых вещей и выполним некоторые GET
запросы к веб-серверу. Я предполагаю, что, когда вы читаете это, вы веб-разработчик. И, как веб-разработчик, вы, вероятно, имеете веб-сервер, работающий по адресу http: // localhost . Скажите http-console, чтобы подключиться к нему, набрав следующее:
$> http-console http://localhost > http-console 0.6.1 > Welcome, enter .help if you're lost. > Connecting to localhost on port 80.
Теперь, когда вы подключены, вы можете начать давать команды. Введите GET /
в командной строке:
http://localhost:80/> GET / HTTP/1.1 200 OK Server: nginx/1.0.11 Date: Wed, 04 Jan 2012 08:40:04 GMT Content-Type: text/html Content-Length: 151 Last-Modified: Mon, 04 Oct 2004 15:04:06 GMT Connection: keep-alive Accept-Ranges: bytes <html> <head> <title>Welcome to nginx!</title> </head> <body bgcolor="white" text="black"> <center><h1>Welcome to nginx!</h1></center> </body> </html>
Мы получаем полный ответ HTTP, включая заголовки HTTP и сам HTML. Вы можете выйти из http-консоли, набрав .q
Давайте попробуем другую команду. Недавно я написал о экспресс-веб-фреймворке для Node , мы создали страницу для отображения десяти последних твитов с упоминанием Sitepoint. Интересно, что произойдет, если мы будем использовать http-console для запроса API поиска в Twitter на похожие твиты?
$> http-console http://search.twitter.com > http-console 0.6.1 > Welcome, enter .help if you're lost. > Connecting to search.twitter.com on port 80.
Теперь выполните запрос GET
для /search.json?q=sitepoint&rpp=10
:
http://search.twitter.com:80/> GET /search.json?q=sitepoint&rpp=10 HTTP/1.1 200 OK Cache-Control: max-age=15, must-revalidate, max-age=300 Expires: Fri, 17 Feb 2012 22:04:02 GMT Content-Type: application/json;charset=utf-8 Content-Length: 7749 Vary: Accept-Encoding Date: Fri, 17 Feb 2012 21:59:02 GMT X-Varnish: 2065334673 Age: 0 Via: 1.1 varnish Server: tfe { page: 1, since_id: 0, max_id_str: '170628259464216576', refresh_url: '?since_id=170628259464216576&q=sitepoint', completed_in: 0.107, results: [ { to_user_id_str: null, to_user_name: null, id: 170628259464216580, iso_language_code: 'en', ...
Опять же, мы возвращаем HTTP-заголовки, но на этот раз мы получаем тело HTTP-ответа в виде JSON (полный JSON опускается для экономии места).
Но мы не ограничены подключением к веб-серверам и веб-сервисам через http-консоль. Мы также можем использовать его для подключения к серверам баз данных, которые предлагают RESTful API, например, CouchDB . (Если у вас не установлен CouchDB, самый простой способ начать работу — это клонировать https://github.com/iriscouch/build-couchdb и следовать инструкциям в README.md).
Предполагая, что CouchDB работает (если вы установили через build-couchdb, запуск CouchDB должен быть таким же простым, как и запуск . ~/path/to/build-couchdb/build/env.sh
, затем couchdb
), подключите к нему http-console следующим образом:
$> http-console http://127.0.0.1:5984 > http-console 0.6.1 > Welcome, enter .help if you're lost. > Connecting to 127.0.0.1 on port 5984.
Затем мы можем выдавать команды для базы данных. Давайте получим список всех баз данных:
http://127.0.0.1:5984/> GET /_all_dbs HTTP/1.1 200 OK Server: CouchDB/1.1.1 (Erlang OTP/R15B) Date: Wed, 04 Jan 2012 08:26:18 GMT Content-Type: text/plain;charset=utf-8 Content-Length: 25 Cache-Control: must-revalidate [ '_replicator', '_users' ]
Как насчет создания новой базы данных?
http://127.0.0.1:5984/> PUT /foodb ... HTTP/1.1 201 Created Server: CouchDB/1.1.1 (Erlang OTP/R15B) Location: http://127.0.0.1/foodb Date: Wed, 04 Jan 2012 09:19:05 GMT Content-Type: text/plain;charset=utf-8 Content-Length: 12 Cache-Control: must-revalidate { ok: true }
GET /_all_dbs
команду GET /_all_dbs
, и мы увидим нашу новую базу данных в списке:
http://127.0.0.1:5984/> GET /_all_dbs HTTP/1.1 200 OK Server: CouchDB/1.1.1 (Erlang OTP/R15B) Date: Wed, 04 Jan 2012 09:19:18 GMT Content-Type: text/plain;charset=utf-8 Content-Length: 33 Cache-Control: must-revalidate [ '_replicator', '_users', 'foodb' ]
Теперь давайте добавим документ в foodb
данных foodb
. Нам нужно установить заголовок Content-Type на application/json
, что легко сделать, .j
команду .j
(чтобы увидеть все доступные команды, введите .help
в приглашении http-console):
http://127.0.0.1:5984/> .j http://127.0.0.1:5984/> POST /foodb ... { "name":"foo", "body":"bar" } HTTP/1.1 201 Created Server: CouchDB/1.1.1 (Erlang OTP/R15B) Location: http://127.0.0.1/foodb/d4a833a173e9d22594b426fd300010a9 Date: Wed, 04 Jan 2012 09:36:30 GMT Content-Type: text/plain;charset=utf-8 Content-Length: 95 Cache-Control: must-revalidate { ok: true, id: 'd4a833a173e9d22594b426fd300010a9', rev: '1-de4f3804f6f3d2d3a393bec924951e5a' }
Мы можем выдавать HEAD
запросы для получения информации о документах, DELETE
запросы на удаление документов и DELETE
запросы на удаление баз данных:
http://127.0.0.1:5984/> HEAD /foodb/d4a833a173e9d22594b426fd300010a9 HTTP/1.1 200 OK Server: CouchDB/1.1.1 (Erlang OTP/R15B) Etag: "1-de4f3804f6f3d2d3a393bec924951e5a" Date: Wed, 04 Jan 2012 09:36:51 GMT Content-Type: text/plain;charset=utf-8 Content-Length: 113 Cache-Control: must-revalidate http://127.0.0.1:5984/> DELETE /foodb/d4a833a173e9d22594b426fd300010a9?rev=1-de4f3804f6f3d2d3a393bec924951e5a HTTP/1.1 200 OK Server: CouchDB/1.1.1 (Erlang OTP/R15B) Etag: "2-3ac7397737175948b7a3a6b7e95d2949" Date: Wed, 04 Jan 2012 09:40:14 GMT Content-Type: text/plain;charset=utf-8 Content-Length: 95 Cache-Control: must-revalidate { ok: true, id: 'd4a833a173e9d22594b426fd300010a9', rev: '2-3ac7397737175948b7a3a6b7e95d2949' } http://127.0.0.1:5984/> DELETE /foodb HTTP/1.1 200 OK Server: CouchDB/1.1.1 (Erlang OTP/R15B) Date: Wed, 04 Jan 2012 09:41:49 GMT Content-Type: text/plain;charset=utf-8 Content-Length: 12 Cache-Control: must-revalidate { ok: true }
Это был быстрый взгляд на использование http-консоли для создания и проверки HTTP-запросов. Мы сделали простые запросы GET к веб-серверу, сделали API-вызов к API поиска Twitter и дали команды серверу CouchDB. Конечно, YMMV, но, надеюсь, вы найдете это полезным дополнением к своему поясу инструментов веб-разработки.