Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Отличная альтернатива для утилит wget и curl в Linux

Оригинал: What is a good alternative to wget or curl on Linux
Автор: Dan Nanni
Дата публикации: 7 апреля 2015 г.
Перевод: А.Панин
Дата перевода: 13 августа 2016 г.

Если вам понадобится получить доступ к документам с веб-сервера в неинтерактивном режиме из терминала (например, загрузить веб-страницу или протестировать restful-API веб-сервиса), вы наверняка воспользуетесь таким инструментом, как wget или curl. Оба эти инструмента поддерживают большое количество аргументов командной строки и могут использоваться в неинтерактивном режиме для доступа к документам с веб-сервера при различных обстоятельствах. Однако, даже такие мощные инструменты могут успешно применяться лишь в том случае, если вы знаете, как с ними работать. Если же вы не являетесь экспертом в плане их аргументов, они смогут использоваться вами разве что в качестве простых утилит для загрузки файлов с веб-серверов.

Представленная разработчиками, как "curl-подобный инструмент для людей", утилита HTTPie была спроектирована с целью улучшения пользовательсских качеств таких утилит, как wget и curl. Главной целью ее разработчиков является предоставление пользователю возможности взаимодействия с веб-сервером с использованием командной строки максимально простым способом. Для этого в рамках HTTPie реализован выразительный, но в то же время простой и интуитивно понятный интерфейс командной строки. Кроме того, утилита выводит ответы веб-сервера с использованием цветовой разметки для улучшения их читаемости, а также поддерживает некоторые полезные механизмы, например, механизмы взаимодействия с сервером с использованием документов JSON и постоянных сессий, которые могут значительно оптимизировать ваш рабочий процесс.

Я уверен, что некоторые из вас скептически отнесутся к замене таких общедоступных и проверенных временем инструментов, как wget и curl, на совершенно неизвестную утилиту. Безусловно, с таким мнением сложно не согласиться, особенно в том случае, если вы работаете системным администратором и обслуживаете множество различных устройств. Однако, в случае разработчиков программного обеспечения и конечных пользователей продуктивность работы является решающим фактором. Если в мое поле зрения попадает удобная альтернатива для одного из стандартных инструментов системы, я обычно не вижу проблемы в его замене на более удобную версию в рамках моего рабочего окружения для экономии драгоценного времени. Лично я не вижу никакого смысла в предпочтительном и религиозном отношении к заменяемым инструментам. В конце концов, Linux всегда предоставляет пользователю выбор.

В рамках данной статьи я постараюсь рассказать об утилите HTTPie и продемонстрировать, почему я считаю ее дружелюбной альтернативой wget и curl.

Отличная альтернатива для утилит wget и curl в Linux

Установка HTTPie в Linux

Утилита HTTPie разработана с использованием языка программирования Python, поэтому вы сможете установить ее практически в любой операционной системе (Linux, Mac OS X, Windows). Кроме того, она может быть установлена в формате пакета программного обеспечения из репозиториев большинства дистрибутивов Linux.

Debian, Ubuntu или Linux Mint:

$ sudo apt-get install httpie

Fedora:

$ sudo yum install httpie

CentOS/RHEL:

В первую очередь следует подключить репозиторий EPEL, после чего выполнить следующую команду:

$ sudo yum install httpie

Альтернативный метод установки утилиты, который должен работать в любом дистрибутиве Linux, заключается в использовании утилиты pip.

$ sudo pip install --upgrade httpie

Примеры использования утилиты HTTPie

После установки HTTPie вы можете использовать ее, инициируя исполнение команды http. Далее я покажу несколько полезных примеров использования этой команды http.

Пример 1: отправка пользовательских заголовков HTTP

Вы можете отправить серверу собственные заголовки HTTP в формате <заголовок:значение>. Например, давайте отправим HTTP-запрос GET серверу www.test.com с стандартными заголовками "user-agent" и "referer", а также с нашим собственным заголовком (а именно, "MyParam").

$ http www.test.com User-Agent:Xmodulo/1.0 Referer:http://xmodulo.com MyParam:Foo

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

Результирующий запрос HTTP будет выглядеть следующим образом:

GET / HTTP/1.1
Host: www.test.com
Accept: */*
Referer: http://xmodulo.com
Accept-Encoding: gzip, deflate, compress
MyParam: Foo
User-Agent: Xmodulo/1.0

Пример 2: загрузка файла

Вы можете использовать утилиту http в качестве инструмента для загрузки файлов с веб-серверов. При этом вам придется осуществить перенаправление потока стандартного вывода утилиты в файл следующим образом:

$ http www.test.com/my_file.zip > my_file.zip

Альтернативный вариант:

$ http --download www.test.com/my_file.zip

Пример 3: использование различных методов HTTP

Помимо используемого по умолчанию метода HTTP для получения данных от веб-сервера под названием GET вы можете использовать любые другие стандартные методы HTTP (такие, как PUT, POST, HEAD). Например, для отправки данных серверу с помощью запроса, использующего метод HTTP под названием PUT, следует выполнить следующую команду:

$ http PUT www.test.com name='Dan Nanni' email=dan@email.com

Пример 4: отправка содержимого формы

Отправка содержимого формы веб-серверу настолько проста, насколько проста следующая команда:

$ http -f POST www.test.com name='Dan Nanni' comment='Hi there'

Параметр -f позволяет утилите http осуществить сериализацию данных полей формы и установить в качестве значения заголовка HTTP "Conetnt-Type" значение "application/x-www-form-urlencoded; charset=utf-8".

Результирующий HTTP-запрос POST будет выглядеть следующим образом:

POST / HTTP/1.1
Host: www.test.com
Content-Length: 31
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Accept-Encoding: gzip, deflate, compress
Accept: */*
User-Agent: HTTPie/0.8.0

name=Dan+Nanni&comment=Hi+there

Пример 5: поддержка JSON

HTTPie имеет встроенный механизм для работы с документами формата JSON, который может оказаться очень полезным ввиду роста популярности формата JSON в качестве формата документов для обмена данными. Фактически, стандартным типом содержимого запросов (обозначаемым с помощью заголовка "content-type"), используемым HTTPie, является JSON. Таким образом, в том случае, если вы отправляете данные полей формы без указания типа содержимого запроса, будет осуществляться сериализация этих данных в объект JSON.

$ http POST www.test.com name='Dan Nanni' comment='Hi there'
Результирующий HTTP-запрос POST будет выглядеть следующим образом:
POST / HTTP/1.1
Host: www.test.com
Content-Length: 44
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate, compress
Accept: application/json
User-Agent: HTTPie/0.8.0

{"name": "Dan Nanni", "comment": "Hi there"}

Пример 6: перенаправление ввода

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

$ http POST api.test.com/db/lookup < my_info.json

Или такую:

$ echo '{"name": "Dan Nanni"}' | http POST api.test.com/db/lookup

Заключение

В данной статье я познакомил вас с утилитой HTTPie, которая является альтернативой для таких известных утилит, как wget и curl. Помимо простых примеров использования этой утилиты, приведенных в статье, вы также можете ознакомиться с большим количеством интересных способов ее использованию на официальном сайте HTTPie. Хотел бы еще раз напомнить, что любой мощный инструмент может успешно применяться лишь в том случае, если вы знаете, как работать с ним. Лично я уже высоко оценил все возможности HTTPie в процессе поиска механизмов простого тестирования сложных API веб-приложений. А что думаете о ней вы?