Curl header: How to send a header using a HTTP request through a cURL call?

👨‍💻 Практическое занятие «Используем методы при помощи curl»

Edit me

Наш пример API прогноза погоды не позволяет использовать что-либо, кроме метода GET, поэтому для этого упражнения, чтобы использовать другие методы с curl, мы будем использовать API-интерфейс petstore. На самом деле мы не будем использовать интерфейс Swagger (о чем мы поговорим позже), на данный момент нам просто нужен API, с помощью которого мы можем создавать, обновлять и удалять контент.

В этом разделе мы создадим нового питомца с помощью Petstore API, обновим его, получим id питомца, удалим его, а затем попытаемся получить удаленного питомца.

Создание питомца

Для создания своего питомца, мы должны передать сообщение в формате JSON в теле запроса. Вместо того, чтобы пытаться кодировать JSON и передавать его в URL, мы сохраним JSON в файле и будем ссылаться на него.

Tip: Многие API требуют публикации запросов, содержащих сообщения JSON в теле. Параметры тела запроса часто зависят от настроек вашего сервиса. Список пар ключ-значение JSON, которые принимает API, называется «Модель» на дисплее интерфейса Swagger.

Создаем текстовый файл и пишем в нем следующий код (эта информация будет передана в параметре -d curl запроса):

{
    "id": 123,
    "category": {
        "id": 123,
        "name": "test"
    },
    "name": "fluffy",
    "photoUrls": [
        "string"
    ],
    "tags": [
        {
            "id": 0,
            "name": "string"
        }
    ],
    "status": "available"
}

Меняем значение в первом id и поменяем кличку с fluffy на какое-нибудь другое

Сохраняем наш файл в формате .json в каталоге, к которому можно легко получить доступ с терминала, например, в пользовательском каталоге (на Mac, Users / YOURUSERNAME — заменяем YOURUSERNAME реальным именем пользователя на вашем компьютере).

В Терминале /командной строке переходим в каталог с сохраненным файлом.

Для перехода по каталогам:

  • На MacOS находим свой текущий рабочий каталог, набрав pwd. Переход на уровень выше при помощи команды cd ../. Переход на уровень ниже при помощи команды cd pets, где pets — это имя каталога, в который нужно попасть. Вводим ls, чтобы просмотреть содержимое каталога.
  • На Windows смотрим в строку пути, чтобы понять в какой директории находимся. Переход на уровень выше при помощи команды cd ../. Переход на уровень ниже при помощи команды cd pets, где pets — это имя каталога, в который нужно попасть. Вводим dir чтобы посмотреть список директорий в текущей директории.

После того, как вы перешли в Терминале/командной строке в каталог с сохраненным JSON файлом, создаем нашего питомца следующим curl запросом:

curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" -d @mypet.json "http://petstore.swagger.io/v2/pet"

Content-Type указывает тип контента, представленного в теле запроса. Accept указывает тип контента, который мы примем в ответе.

Ответ будет выглядеть примерно так:

{"id":891654,"category":{"id":4,"name":"testexecution"},"name":"SpeedDemon","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"}

Проверьте, что в ответе кличка именно вашего питомца.

Tip: Не стесняйтесь выполнить этот же запрос несколько раз. REST API являются «идемпотентными», что означает, что выполнение одного и того же запроса более одного раза не приведет к дублированию результатов (мы просто создаем одного питомца, а не нескольких питомцев). Тодд Фредрих объясняет идемпотентность, сравнивая ее с беременной коровой. Допустим, вы привели быка, чтобы забеременеть. Даже если бык и корова спариваются несколько раз, результатом будет всего одна беременность, а не беременность для каждого сеанса спаривания.

Обновление питомца

А что если питомец не любит свое имя?

Изменим ему имя на другое используя метод обновления.

curl -X PUT --header "Content-Type: application/json" --header "Accept: application/json" -d @mypet.json "http://petstore.swagger.io/v2/pet"

В ответе будет новое имя питомца.

Получение имени питомца при помощи ID

Теперь узнаем имя питомца, передав его ID в конечную точку /pet/{petID}:

curl -X GET --header "Accept: application/json" "http://petstore.swagger.io/v2/pet/51231236"

В ответе будет информация о нашем питомце:

{"id":891654,"category":{"id":123,"name":"test"},"name":"Beatle","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"}

Можно отформатировать JSON, вставив его в инструмент форматирования JSON

{
    "id": 891654,
    "category": {
        "id": 123,
        "name": "test"
    },
    "name": "Beatle",
    "photoUrls": [
        "string"
    ],
    "tags": [
        {
            "id": 0,
            "name": "string"
        }
    ],
    "status": "available"
}

Удаление питомца

“Извини, сынок, собака была бешеной, пришлось пристрелить” (© “Маска” фильм, 1994)

Для удаления питомца используем метод DELETE. В примере ниже меняем 5123123 на id своего питомца:

curl -X DELETE --header "Accept: application/json" "http://petstore.swagger.io/v2/pet/891654"

Теперь проверим, получилось удалить питомца. Используем метод GET в этой же команде

curl -X GET --header "Accept: application/json" "http://petstore.swagger.io/v2/pet/891654"

Ответ будет примерно таким:

{"code":1,"type":"error","message":"Pet not found"}

Этот пример позволил нам увидеть, как можно работать с curl для создания, чтения, обновления и удаления ресурсов. Эти четыре операции называются CRUD и являются общими почти для каждого языка программирования.

Хотя Postman, вероятно, проще в использовании, curl используется на уровне мощности. Команды тестирования часто создают сложные тестовые сценарии, которые повторяют множество запросов curl.

Импорт curl в Postman

Можно импортировать команды curl в Postman выполняя следующее:

Открываем новую вкладку в Postman и нажимаем Import в левом верхнем углу.

В диалоговом окне выбираем вкладку “Paste Raw Text” и вводим команду:

curl -X GET --header "Accept: application/json" "http://petstore.swagger.io/v2/pet/891654"

Указываем свой Id питомца и проверяем, что нет лишних пробелов.

Нажимаем на кнопку Import

Закрываем диалоговое окно, если не закрылось автоматически.

Нажимаем кнопку Send (Если питомец был удален, то будет выдана ошибка “Pet not found”)

Экспорт Postman в curl

Можно экспортировать Postman в curl, выполнив следующие действия:

  • При желании выбираем один из наших запросов API OpenWeatherMap в Postman.
  • Нажимаем кнопку Code
  • Выбираем curl в выпадающем списке.
  • Копируем отрывок кода
curl -X GET \
    'https://api.openweathermap.org/data/2.5/weather?lat=37.3565982&lon=-121.9689848&units=imperial&appid=fd4698c940c6d1da602a70ac34f0b147' \
    -H 'Postman-Token: de0da6b7-1dbc-44d6-acc1-9741f05a7bf1' \
    -H 'cache-control: no-cache'

Вы можете видеть, что Postman добавляет дополнительную информацию заголовка (-H 'Postman-Token: de0da6b7-1dbc-44d6-acc1-9741f05a7bf1' \ -H 'cache-control: no-cache') в запрос. Эта дополнительная информация заголовка не нужна и может быть удалена.

  • Удаляем обратный слэш и разрывы строк. На Windows еще меняем одинарные кавычки на двойные.
  • Вставляем команду curl в терминал и смотрим результат.
curl -X GET "https://api.openweathermap.org/data/2.5/weather?lat=37.3565982&lon=-121.9689848&units=imperial&appid=fd4698c940c6d1da602a70ac34f0b147"

Благодаря функциям импорта и кода Postman можно легко переключаться между Postman и curl.

🔙

Go next ➡

Как установить заголовок запроса для curl?

спросил

Изменено
5 месяцев назад

Просмотрено
378 тысяч раз

Как мне передать несколько значений в заголовке для запроса curl ?

3

Просто используйте параметр -H несколько раз:

 curl -H "Accept-Charset: utf-8" -H "Content-Type: application/x-www-form-urlencoded" http://www.  некоторый-домен.пример
 

2

Чтобы передать несколько заголовков в запросе curl, просто добавьте дополнительные -H или --header к вашей команде curl.

Пример

 //Упрощенный
$ curl -v -H 'header1:val' -H 'header2:val' URL
//Пояснение
$ curl -v -H 'Соединение: keep-alive' -H 'Тип содержимого: application/json' https://www.example.com
 

Идем дальше

Для стандартных полей заголовка HTTP, таких как User-Agent , Cookie , Host , на самом деле существует другой способ их установки. Команда curl предлагает определенные параметры для установки этих полей заголовка:

  • -A (или —user-agent): установите поле «User-Agent».
  • -b (или —cookie): установить поле «Cookie».
  • -e (или —referer): установить поле «Referer».
  • -H (или —header): установить поле «Заголовок»

Например, следующие две команды эквивалентны. Оба они изменяют строку «User-Agent» в заголовке HTTP.

 $ curl -v -H "Тип содержимого: application/json" -H "User-Agent: UserAgentString" https://www.example.com
    $ curl -v -H "Тип содержимого: application/json" -A "UserAgentString" https://www.example.com
 

Иногда смены заголовка недостаточно, некоторые сайты также проверяют реферер:

 curl -v \
     -H 'Хост: restapi.some-site.com' \
     -H 'Соединение: поддерживать активность' \
     -H 'Принять: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0,8' \
     -H 'Принимаемые языки: en-GB,en-US;q=0.8,en;q=0.6' \
     -e локальный хост \
     -A 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/29.0.1547.65 Safari/537.36' \
     'http://restapi.some-site.com/getsomething?argument=value&argument2=value'
 

В этом примере реферером (-e или —referer в curl) является «localhost».

0

Установить заголовок -H «Тип содержимого: приложение/json» с использованием запроса GET

Пример —

curl -H "Тип контента: application/json" -X GET https://jsonplaceholder. typicode.com/posts/1

Если вы хотите добавить несколько заголовков

curl -H "Соединение: keep-alive" -H "Тип содержимого: application/json -X GET https://jsonplaceholder.typicode.com/posts/1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

curl: читать заголовки из файла

спросил

Изменено
10 месяцев назад

Просмотрено
64к раз

После того, как —dump-header запишет файл, как прочитать эти заголовки обратно в следующий запрос? Я хотел бы прочитать их из файла, потому что их несколько.

Пробовал стандарт в: заголовки кошек | curl -v -H - ...

На самом деле я использую функцию Firebug для «Копирования заголовков запросов», а затем сохраняю их в файл. Похоже, это тот же формат.

Легко:

 $ curl -H @header_file https://example.com
 

… где файл заголовка представляет собой обычный текстовый файл с заголовком HTTP в каждой строке. Вот так:

 Цвет: красный
Размер обуви: 11
Секрет: да
Пользовательский агент: foobar/3000
Имя: "Джо Смит"
 

У curl не было возможности массово изменять заголовки, подобные этому, из файла. Их нужно было модифицировать один за другим с помощью -H .

Ваш лучший подход со старой версией curl, вероятно, состоит в том, чтобы вместо этого написать сценарий оболочки, который собирает все заголовки из файла и использует их, например:

 #!/бин/ш
при чтении строки; делать
  args="$args -H '$line'";
сделанный
curl $args https://example.com
 

Вызовите скрипт следующим образом:

 $ sh script.sh < header_file
 

5

как насчет этого:

 curl -v -H "$(cat headers.txt)" yourhost.com
 

, где headers.txt выглядит как

 Header1: bla
Заголовок2: блапп
 

работает в БАШ.

5

Начиная с curl 7.55.0, он теперь может читать заголовки из файла:

 curl -H @filename
 

Теперь это так просто.