Как отправить http запрос из командной строки windows
Настройка
Как всякий серьезный софт, curl требует установки в операционной системе. Хорошая новость: скорее всего, он уже установлен! Точнее, встроен в операционку. Уважающий себя тестировщик, разумеется, работает в Linux, а почти каждый дистрибутив Linux уже идет с curl. Более того, даже Windows 10 (начиная с версии 1803) поставляется с curl.
Проверим, есть ли в системе curl.
В Linux набираем в терминале:
Если все-таки работаешь в Windows, то запускаешь cmd или, лучше, PowerShell:
Команда покажет версию curl, прикрепленные библиотеки, дату релиза, поддерживаемые протоколы и поддерживаемые функции. В Linux увидим следующее:
Если введенная команда выдала ошибку, то curl не установлен, значит его надо скачать и поставить. Еще одна хорошая новость: он бесплатный (но есть нюансы, о которых в конце). Есть версии для практически всех операционных систем, размер ехе-шника не превышает 5 Мб.
Примечание. С этого момента, будут приводиться исключительно «линуксовые» bash-команды, для ясности и читабельности. Если ты сидишь в Windows и примеры почему-то не работают, попробуй добавлять «.exe» после команды curl, или удалять (возможные) лишние пробелы в строках (line breaks).
Базовые опции
Несмотря на то, что Curl очень простой инструмент, он имеет множество различных функций. Начнем с ними знакомиться:
- --dump-header или -D : Сохраняет в указанный дамп-файл полученные заголовки. Пример: curl -D result.header .
- --output или -O : Выводит в указанный дамп-файл, минуя stdout. Пример: curl -o result.json .
GET-метод
Мы познакомились с основами, пора перейти к более серьезным вещам.
Во первых, меняем текущую папку в командной оболочке, на домашнюю папку или на рабочий стол (desktop), чтобы легче было найти выведенные из curl файлы.
Делаем первые запросы:
Если все пошло как надо, после запуска команды в прописанной на первом этапе домашней папке появятся нужные файлы. В данном случае будет выглядеть так.
В файле result.headers видим, что запрос успешно выполнен, с кодом ответа 200 (все ОК), от сервера получен таймкод ответа (timestamp), и все заголовки.
В этом файле result.json находится тело ответа. Это данные, возвращенные сервером, в красивом JSON-формате (об особенностях формата читаем здесь).
POST-метод
Отправка простого текста
Как видим, в запрос включен кастомный заголовок "Custom-Header: Testing" . Он должен отображаться в теле ответа.
Смотрим теперь в файл result.headers
и файл result.json
Параметры строки запроса
В curl поддерживается не только простой текст, но и достаточно сложные параметры типа:
Сервер, как и предыдущем примере, правильно «зеркалит» параметры, которые curl отправил.
Отправка JSON-объекта
Тут мы добавили специальный заголовок Content-Type , сообщающий серверу, что ему посылается json-файл. Путь к файлу с данными указывается флагом -d с собачкой @ , и далее путь к файлу (в нашем случае это будет текущая папка).
Вот содержимое файла data.json , который надо создать:
И файл result.json :
И снова видим, как curl умеет корректно отправлять контент JSON-файлов на сервер.
Эмуляция отправки значений формы
Иногда может понадобиться имитировать отправку формы. Curl умеет и это:
Чтобы обозначить для сервера, что посылаются данные формы, добавляется заголовок с соответствующим MIME-типом (как показано выше), плюс параметр -F в каждом из полей и значений.
Видим, что сервер получил форму и правильно обработал все поля.
Отправка файла
Выше мы демонстрировали достаточно простые действия. А как насчет передачи файла? Файлы передаются таким же образом, как формы выше. Отправим изображение из текущей папки:
Другие методы
Можно попробовать «погонять» любые запросы, чтобы убедиться, как полезен бывает curl при тестировании API. В целом, обработка запросов зависит от типа API и имплементации метода.
Аутентификация
То есть код 401 (не прошла авторизация).
Добавим в запрос логин и пароль:
Все хорошо, авторизация прошла успешно.
Платный тариф
На скрине слева отрендеренный markdown-документ, справа полученные result.headers и result.json, и терминал внизу, куда тестировщику приходится глядеть чаще всего.
Вопреки убеждению, бытующему в определенных кругах, curl хорошо работает не только в REST-архитектуре, но и в SOAP.
Конечно, раскрыть все нюансы в одной статье невозможно, и чтобы продолжить знакомство с такой полезной вещью как curl, не обойтись без чтения официальной документации на их сайте. Там же и примеры использования.”
Предварительные сведения
Используя ключ -v , можно увидеть, какие именно команды curl отсылает серверу. Этот ключ дает возможность разобраться в особенностях взаимодействия curl и веб-сервера и помогает отладить запрос.
Формы
Справка
Справку по curl можно получить, набрав в командной строке
$ — приглашение командной строки.
Получить содержимое страницы (GET)
вы получите веб-страницу, выведенную в окно терминала (точнее, в стандартный вывод). Чтобы сохранить эту страницу в файл curl.html , нужно указать
Форма запроса может использовать метод GET. Например, так:
Для формирования GET-запроса, введите то, что ожидалось от формы:
Метод POST
Форма, генерирующая POST-запрос, отличается от предыдущей лишь методом отправки:
curl сформирует POST-запрос с теми же данными следующим образом:
Обратите внимание на то, что данные, которые вы отправляете серверу, должны быть правильно закодированы. curl не сделает этого за вас. К примеру, если вы хотите, чтобы данные содержали пробел, то вам нужно заменить этот пробел на %20 и т. п. Это одна из самых распространенных ошибок, в результате чего данные передаются не так, как нужно.
Загрузка файлов с помощью POST
Форма, с помощью которой пользователь может загрузить файл, выглядит примерно так:
Заметьте, что тип содержимого Content-Type установлен в multipart/form-data .
Чтобы с помощью curl отослать данные в такую форму, введите:
Скрытые поля формы
Скрытые поля в формах являются одним из наиболее распространенных способов передачи информации о состоянии HTML-приложения. Такие поля не заполняются, они невидимы для пользователя, но передаются так же, как и обычные поля.
Пример формы с одним видимым и одним скрытым полями:
Как выглядит POST-запрос "изнутри"
Когда с помощью curl вы заполняете форму и отсылаете ее данные на сервер, вы наверняка хотите, чтобы сформированный curl POST-запрос выглядел так же, как если бы он был выполнен с помощью браузера.
Простейший способ увидеть свой POST-запрос заключается в следующем:
Вы увидите, что данные присоединились к URL и разделены символами ? , как это и предполагается при использовании GET-форм.
Комментарии
Дмитрий Храмов
Компьютерное моделирование и все, что с ним связано: сбор данных, их анализ, разработка математических моделей, софт для моделирования, визуализации и оформления публикаций. Ну и за жизнь немного.
curl - отличный инструмент, который позволяет создавать сетевые запросы из командной строки.
curl - это инструмент командной строки, который позволяет передавать данные по сети.
Когда дело доходит до отладки сетевых запросов, curl - один из лучших инструментов, которые вы можете найти.
Это один из тех инструментов, к которому, как только знаешь, как пользоваться, всегда возвращаешься. Лучший друг программиста.
Он универсален, работает на Linux, Mac, Windows. Обратитесь кофициальное руководство по установкечтобы установить его в вашей системе.
Интересный факт: автор и сопровождающий curl, шведский, был награжден королем Швеции за вклад, который его работа (curl и libcurl) внесла в компьютерный мир.
Когда вы выполняете запрос, curl вернет тело ответа:
С использованием I вариант, вы можете получитьТолькозаголовки, а не тело ответа:
С помощью -X POST выполнит запрос POST.
Вы можете выполнить запрос POST, передав URL-адрес данных в кодировке:
В этом случае application/x-www-form-urlencoded Content-Type отправлен.
В этом случае вам нужно явно установить заголовок Content-Type, используя H вариант:
Следуйте перенаправлению
Ответ перенаправления, например 301, который указывает Location заголовок ответа, может автоматически сопровождаться указанием L вариант:
Сохранить ответ в файл
С использованием o вариант, который вы можете указать curl, чтобы сохранить ответ в файл:
Вы также можете просто сохранить файл по его имени на сервере, используя O вариант:
Установить другой пользовательский агент
Пользовательский агент сообщает серверу, какой клиент выполняет запрос. По умолчанию curl отправляет curl/<version> пользовательский агент, например: curl/7.54.0 .
Вы можете указать другой пользовательский агент, используя --user-agent вариант:
Проверка всех деталей запроса и ответа
Использовать --verbose возможность заставить curl выводить все детали запроса и ответа:
Сетевые запросы, запущенные из командной строки, бывают разных форм и размеров. Некоторые пользователи признают только curl, другие любят wget. Кому-то больше нравится пакет lwp-request, который предоставляет команды со знакомыми названиями GET, POST и HEAD. Команда HEAD довольно регулярно используется для устранения неполадок с заголовками, возвращаемыми серверами.
Требования
Команды, которые мы собираемся использовать, предоставляются пакетом lwp-request.
Рассматриваемый пакет написан на Perl и, как правило, входит в стандартную комплектацию многих дистрибутивов Linux, а также других Unix-подобных операционных систем, таких как macOS.
Команду lwp-request можно вызвать напрямую с рядом аргументов, но для простоты мы рассмотрим вспомогательные сценарии, которые она поставляет.
Если в вашей системе нет GET, POST и HEAD, вы, скорее всего, сможете установить пакет lwp-request при помощи вашего любимого менеджера пакетов.
В Ubuntu- и Debian-подобных системах вы можете установить этот пакет с помощью следующих команд:
sudo apt update
sudo apt install libwww-perl
GET-запросы
Предположим, нам так понравился логотип Alligator.io, что мы решили загрузить его на локальную машину. Чтобы получить файл, вы можете просто запустить GET-запрос:
Согласно философии Unix, команда GET предназначена для выполнения одной задачи, а именно извлечение файла.
Теперь у нас есть локальная копия логотипа Alligator.io.
POST-запросы
Команда GET позволяет нам получать файлы с удаленных серверов, в то время как POST – отправлять данные на сервер для обработки, а также возвращать их вывод.
По сути синтаксис POST такой же, как GET:
HEAD-запросы
Как уже упоминалось, команда HEAD чрезвычайно полезна для отладки и устранения неполадок. С большой долей вероятности можно сказать, что она входит в пятерку самых популярных утилит командной строки.
Подобно GET и POST, синтаксис HEAD довольно прост:
Эта команда вернет 200 OK, а также информацию о заголовках, возвращаемых веб-сервисом.
Команда HEAD по умолчанию дает информацию только о последней остановке в цепочке запросов. Чтобы увидеть все запросы, включая автоматический 301 Moved Permanently, передайте аргумент -S:
Это дает нам немного больше информации:
Цветной вывод
Локальные псевдонимы команд выглядят так:
Заключение
В следующий раз, когда вам нужно будет сделать сетевой запрос к API или устранить неполадки с заголовками, возвращаемыми сервером, вы можете сделать это с помощью командной строки, оставив Postman и другие подобные инструменты без дела.
Читайте также: