Библиотека сайта 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-подобный инструмент для людей", wget
и curl
. Главной целью ее разработчиков является предоставление пользователю возможности взаимодействия с веб-сервером с использованием командной строки максимально простым способом. Для этого в рамках HTTPie реализован выразительный, но в то же время простой и интуитивно понятный интерфейс командной строки. Кроме того, утилита выводит ответы веб-сервера с использованием цветовой разметки для улучшения их читаемости, а также поддерживает некоторые полезные механизмы, например, механизмы взаимодействия с сервером с использованием документов JSON и постоянных сессий, которые могут значительно оптимизировать ваш рабочий процесс.
Я уверен, что некоторые из вас скептически отнесутся к замене таких общедоступных и проверенных временем инструментов, как wget
и curl
, на совершенно неизвестную утилиту. Безусловно, с таким мнением сложно не согласиться, особенно в том случае, если вы работаете системным администратором и обслуживаете множество различных устройств. Однако, в случае разработчиков программного обеспечения и конечных пользователей продуктивность работы является решающим фактором. Если в мое поле зрения попадает удобная альтернатива для одного из стандартных инструментов системы, я обычно не вижу проблемы в его замене на более удобную версию в рамках моего рабочего окружения для экономии драгоценного времени. Лично я не вижу никакого смысла в предпочтительном и религиозном отношении к заменяемым инструментам. В конце концов, Linux всегда предоставляет пользователю выбор.
В рамках данной статьи я постараюсь рассказать об утилите HTTPie и продемонстрировать, почему я считаю ее дружелюбной альтернативой wget
и curl
.
Установка 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
. Помимо простых примеров использования этой утилиты, приведенных в статье, вы также можете ознакомиться с большим количеством интересных способов ее использованию на