Как отправить заголовок с помощью HTTP-запроса через вызов curl?

Я хочу отправить заголовок на мой сервер Apache на компьютере с Linux. Как я могу добиться этого с помощью вызова curl?

10.12.2008 16:38:57
Есть хороший способ научиться использовать curl для http запросов на примерах. Загрузите новейшую версию Postman, выполните любую конфигурацию http-запроса по своему желанию на уровне пользовательского интерфейса (например, post, put, get .. с заголовками и телом json), а затем нажмите «создать код» и выберите параметр «curl» , Это дает вам эквивалентную командную строку.
Vinicius Lima 28.05.2016 22:51:46
10 ОТВЕТОВ
РЕШЕНИЕ

ПОЛУЧИТЬ:

с JSON:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" http://hostname/resource

с XML:

curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET http://hostname/resource

ПОСЛЕ:

Для размещения данных:

curl --data "param1=value1&param2=value2" http://hostname/resource

Для загрузки файла:

curl --form "fileupload=@filename.txt" http://hostname/resource

RESTful HTTP Post:

curl -X POST -d @filename http://hostname/resource

Для входа на сайт (авторизация):

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/
471
7.10.2013 05:15:07
что означает @filename для сообщения RESTful? вы размещаете файл на REST-сервер? это странно для меня
JesseBoyd 16.10.2017 18:17:38
Для людей, прибывающих позже, которым может быть интересно то же самое ... нотация @ - это способ чтения данных для отправки на сервер из файла, а не встраивание их в запрос curl. Вы не размещаете файл как таковой, вы размещаете содержимое файла как тело вашего запроса POST.
f1dave 24.10.2017 02:05:35
Более подробный ответ здесь: stackoverflow.com/questions/14978411/… :)
Amith Koujalgi 19.12.2017 18:09:09

man curl:

   -H/--header <header>
          (HTTP)  Extra header to use when getting a web page. You may specify
          any number of extra headers. Note that if you should  add  a  custom
          header that has the same name as one of the internal ones curl would
          use, your externally set header will be used instead of the internal
          one.  This  allows  you  to make even trickier stuff than curl would
          normally do. You should not replace internally set  headers  without
          knowing  perfectly well what you're doing. Remove an internal header
          by giving a replacement without content on the  right  side  of  the
          colon, as in: -H "Host:".

          curl  will  make sure that each header you add/replace get sent with
          the proper end of line marker, you should thus not  add  that  as  a
          part  of the header content: do not add newlines or carriage returns
          they will only mess things up for you.

          See also the -A/--user-agent and -e/--referer options.

          This option can be used multiple times to add/replace/remove  multi-
          ple headers.

Пример:

curl --header "X-MyHeader: 123" www.google.com

Вы можете увидеть запрос, который curl отправил, добавив -vопцию.

1977
11.12.2017 12:02:31
Если вы хотите отправить несколько заголовков, используйте более одного заголовка - все нормально, curl будет анализировать каждый заголовок как отдельный. Невозможно разделить заголовки внутри одного параметра --header. пример: curl --header "Принять: javascript" --header "test: hello" -v www.google.com
Hatoru Hansou 24.09.2015 06:41:34
Если людям нужны примеры, я просто оставлю это здесь: bropages.org
Peter Westmacott 15.08.2016 10:57:00
man-страницы (по крайней мере, в OSX) теперь содержат пример: Пример: # curl -H "X-First-Name: Joe" 192.168.0.1
JESii 6.04.2017 13:51:51
@MartinKonicek и другие: я НАСТОЯТЕЛЬНО рекомендую утилиту tldr (brew, etc, install tldr). Это только примеры. например, "- Отправить запрос с дополнительным заголовком, используя собственный метод HTTP: curl -H 'X-My-Header: 123' -X PUT example.com "
user3853034 13.12.2017 16:41:02

Использование -H or --header.

Справочная страница: http://curl.haxx.se/docs/manpage.html#-H

54
28.08.2018 18:23:00
Опцию -H можно использовать в командной строке, например: curl -H "pwd: 123" localhost / test.php
shasi kanth 11.02.2011 05:58:21
Спасибо. Коротко, кратко и покрыто ссылкой на док. Однако ссылка уже устарела, теперь новая - curl.haxx.se/docs/manpage.html#-H
Oleksii Kyslytsyn 23.03.2018 13:34:24

В PHP :

curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName:HeaderValue'));

или вы можете установить несколько:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName:HeaderValue', 'HeaderName2:HeaderValue2'));
279
28.04.2018 08:21:30
@James в некоторых случаях работает нормально, но в других CURL отправляет дополнительный заголовок «Expect: 100-continue» - есть идеи, как его удалить?
coding_idiot 12.02.2013 23:50:42
@coding_idiot: Вы можете передать «Expect:» в массив значений заголовков, чтобы отключить его. Пример: curl_setopt ($ ch, CURLOPT_HTTPHEADER, массив ('HeaderName: HeaderValue', 'Expect:'));
ether 9.09.2013 18:12:37
ОП ничего не сказал о мысли в PHP
hanshenrik 3.12.2015 11:26:00
Имя заголовка в верхнем регистре с подчеркиванием, а HTTP_ имеет префикс. Например, «токен защиты» становится «HTTP_PROTECTION_TOKEN».
Bimal Poudel 27.11.2017 19:11:25

Я переключился с локон на Httpie ; синтаксис выглядит так:

http http://myurl HeaderName:value
9
2.09.2015 20:39:59

GET (несколько параметров):

curl -X  GET "http://localhost:3000/action?result1=gh&result2=ghk"

или

curl --request  GET "http://localhost:3000/action?result1=gh&result2=ghk"

или

curl  "http://localhost:3000/action?result1=gh&result2=ghk"

или

curl -i -H "Application/json" -H "Content-type: application/json"  "http://localhost:3000/action?result1=gh&result2=ghk"
44
14.10.2015 09:50:21
Спасибо. Я не понял обязательные кавычки для этого вида URL.
remat_br 24.10.2017 19:13:16

Если вы хотите отправить свои пользовательские заголовки , вы можете сделать это следующим образом:

curl -v -H @{'custom_header'='custom_header_value'} http://localhost:3000/action?result1=gh&result2=ghk
7
28.04.2018 08:23:18

Вы также можете отправить несколько заголовков, данные (например, JSON) и указать метод Call (POST, GET) в один вызов CUrl, например:

curl -X POST(Get or whatever) \
  http://your_url.com/api/endpoint \
  -H 'Content-Type: application/json' \
  -H 'header-element1: header-data1' \
  -H 'header-element2: header-data2' \

...... больше заголовков ................

  -d '{
  "JsonExArray": [
    {
      "json_prop": "1",
    },
    {
      "json_prop": "2",
    }
  ]
}'
11
7.01.2019 20:34:58

Я использую Почтальон.

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

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

введите описание изображения здесь

12
9.04.2019 11:03:45
Это хороший хак, чтобы ускорить процесс, но будьте осторожны, избегая одинарных или двойных кавычек, если вы используете сценарий оболочки в Windows, поскольку у сценария оболочки есть свои собственные требования к форматированию
Thierrydev 15.05.2019 10:56:32
Хотя почтальон - хороший инструмент, но когда у вас нет графического окружения, как в кубиках Кубернетеса, это бесполезно. Учитесь завиваться, и вы всегда можете проверить отдых.
Namphibian 27.02.2020 00:18:41

В среде anaconda через windows команды должны быть: GET, например:

curl.exe http://127.0.0.1:5000/books 

Разместите или исправьте данные, например:

curl.exe http://127.0.0.1:5000/books/8 -X PATCH -H "Content-Type: application/json" -d '{\"rating\":\"2\"}' 

PS: добавьте обратную косую черту для данных JSON, чтобы избежать ошибок этого типа => Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)

и используйте curl.exeвместо того, curlчтобы избежать этой проблемы:

Invoke-WebRequest : Cannot bind parameter 'Headers'. Cannot convert the "Content-Type: application/json" value of type
"System.String" to type "System.Collections.IDictionary".
At line:1 char:48
+ ... 0.1:5000/books/8 -X PATCH -H "Content-Type: application/json" -d '{\" ...
+                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
2
13.02.2020 14:23:27