如何通过curl调用使用HTTP请求发送标头?

gag*_*eet 1328 curl http-headers

我希望在Linux机器上向我的Apache服务器发送一个标头.如何通过卷曲调用实现此目的?

Tad*_*der 1943

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.
Run Code Online (Sandbox Code Playgroud)

例:

curl --header "X-MyHeader: 123" www.google.com
Run Code Online (Sandbox Code Playgroud)

您可以通过添加-v选项查看卷曲发送的请求.

  • 如果你想发送多个头文件,请使用多个--header,没关系,curl会将每个头文件解析为不同的头文件.无法在同一个--header参数中分隔标头.示例:curl --header"Accept:javascript"--header"test:hello"-v www.google.com (67认同)
  • @MartinKonicek和其他人:我强烈建议使用tldr utiltiy(brew等安装tldr).它唯一的例子.例如" - 使用自定义HTTP方法发送带有额外标头的请求:curl -H'X-My-Header:123'-X PUT http://example.com" (5认同)
  • 如果人们想要例子,我会留在这里:http://bropages.org/ (3认同)

Ran*_*esh 376

得到:

使用JSON:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" http://hostname/resource
Run Code Online (Sandbox Code Playgroud)

使用XML:

curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET http://hostname/resource
Run Code Online (Sandbox Code Playgroud)

POST:

用于发布数据:

curl --data "param1=value1&param2=value2" http://hostname/resource
Run Code Online (Sandbox Code Playgroud)

对于文件上传:

curl --form "fileupload=@filename.txt" http://hostname/resource
Run Code Online (Sandbox Code Playgroud)

RESTful HTTP帖子:

curl -X POST -d @filename http://hostname/resource
Run Code Online (Sandbox Code Playgroud)

用于登录站点(auth):

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/
Run Code Online (Sandbox Code Playgroud)

  • 对于后来到达的人可能想知道同样的事情... @符号是一种读取数据从文件发送到服务器的方式,而不是将其内联到curl请求中.您没有POST文件本身,而是将POST文件的内容作为POST请求的主体发布. (5认同)

小智 274

PHP中:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName:HeaderValue'));
Run Code Online (Sandbox Code Playgroud)

或者您可以设置多个:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName:HeaderValue', 'HeaderName2:HeaderValue2'));
Run Code Online (Sandbox Code Playgroud)

  • OP没有透露任何有关PHP思想的内容 (9认同)

Gre*_*reg 54

使用-H or --header.

手册页:http://curl.haxx.se/docs/manpage.html#-H

  • -H选项可以在命令提示符中使用,例如:curl -H"pwd:123"http://localhost/test.php (10认同)

Vie*_*van 43

GET(多个参数):

curl -X  GET "http://localhost:3000/action?result1=gh&result2=ghk"
Run Code Online (Sandbox Code Playgroud)

要么

curl --request  GET "http://localhost:3000/action?result1=gh&result2=ghk"
Run Code Online (Sandbox Code Playgroud)

要么

curl  "http://localhost:3000/action?result1=gh&result2=ghk"
Run Code Online (Sandbox Code Playgroud)

要么

curl -i -H "Application/json" -H "Content-type: application/json"  "http://localhost:3000/action?result1=gh&result2=ghk"
Run Code Online (Sandbox Code Playgroud)


小智 10

您还可以发送多个标头,数据(例如JSON),并在单个CUrl调用中指定Call方法(POST,GET),如下所示:

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' \
Run Code Online (Sandbox Code Playgroud)

......更多标题...

  -d '{
  "JsonExArray": [
    {
      "json_prop": "1",
    },
    {
      "json_prop": "2",
    }
  ]
}'
Run Code Online (Sandbox Code Playgroud)


小智 10

我用邮递员。

执行您想执行的任何呼叫。然后,邮递员提供了一个方便的工具来显示卷曲代码。

在终端中运行它。 在此处输入图片说明

在此处输入图片说明


Gra*_*rks 9

我已经从curl转到了Httpie ; 语法如下:

http http://myurl HeaderName:value
Run Code Online (Sandbox Code Playgroud)


Pal*_*sri 7

如果您想发送自定义标头,可以这样做:

curl -v -H @{'custom_header'='custom_header_value'} http://localhost:3000/action?result1=gh&result2=ghk
Run Code Online (Sandbox Code Playgroud)


DIN*_*LIT 6

Windows 的anaconda环境中,命令应该是:GET,例如:

curl.exe http://127.0.0.1:5000/books 
Run Code Online (Sandbox Code Playgroud)

发布或修补前的数据:

curl.exe http://127.0.0.1:5000/books/8 -X PATCH -H "Content-Type: application/json" -d '{\"rating\":\"2\"}' 
Run Code Online (Sandbox Code Playgroud)

PS:为json数据添加反斜杠以避免此类错误=>Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)

并使用curl.exe而不是curlonly 来避免这个问题:

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
Run Code Online (Sandbox Code Playgroud)