Как отправить http запрос из командной строки windows

Обновлено: 29.06.2024

Настройка

Как всякий серьезный софт, 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 (не прошла авторизация).

Добавим в запрос логин и пароль:

Все хорошо, авторизация прошла успешно.

Платный тариф

curl vs code

На скрине слева отрендеренный 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 и другие подобные инструменты без дела.

Читайте также: