652

可以使用 HTTP HEAD 仅请求标头,-I作为curl(1).

$ curl -I /

冗长的 HTML 响应正文很难在命令行中获取,因此我只想获取标头作为我的 POST 请求的反馈。但是,HEAD 和 POST 是两种不同的方法。

如何让 cURL 仅显示 POST 请求的响应标头?

4

8 回答 8

863
-D, --dump-header <file>
       Write the protocol headers to the specified file.

       This  option  is handy to use when you want to store the headers
       that a HTTP site sends to you. Cookies from  the  headers  could
       then  be  read  in  a  second  curl  invocation by using the -b,
       --cookie option! The -c, --cookie-jar option is however a better
       way to store cookies.

-S, --show-error
       When used with -s, --silent, it makes curl show an error message if it fails.

-L/--location
      (HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response
      code), this option will make curl redo the request on the new place. If used together with -i/--include or -I/--head, headers from  all  requested
      pages  will  be  shown.  When authentication is used, curl only sends its credentials to the initial host. If a redirect takes curl to a different
      host, it won’t be able to intercept the user+password. See also --location-trusted on how to change this. You can limit the amount of redirects to
      follow by using the --max-redirs option.

      When curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP
      response was 301, 302, or 303. If the response code was any other 3xx code, curl will re-send the following  request  using  the  same  unmodified
      method.

从手册页。所以

curl -sSL -D - www.acooke.org -o /dev/null

遵循重定向,将标头转储到标准输出并将数据发送到 /dev/null(这是 GET,而不是 POST,但您可以使用 POST 做同样的事情 - 只需添加您已经用于 POST 数据的任何选项)

注意-后面的-D表示输出“文件”是标准输出。

于 2012-04-08T04:18:14.307 回答
228

其他答案需要下载响应正文。但是有一种方法可以发出仅获取标头的 POST 请求:

curl -s -I -X POST http://www.google.com

An-I本身执行一个 HEAD 请求,该请求可以被-X POST执行 POST(或任何其他)请求覆盖,并且仍然只获取标头数据。

于 2016-07-31T00:12:53.873 回答
93

以下命令显示额外信息

curl -X POST http://httpbin.org/post -v > /dev/null

您可以要求服务器仅发送 HEAD,而不是完整响应

curl -X HEAD -I http://httpbin.org/

Note:在某些情况下,服务器可能会为 POST 和 HEAD 发送不同的标头。但在几乎所有情况下,标题都是相同的。

于 2016-05-09T03:09:12.457 回答
60

对于长响应体(以及各种其他类似情况),我使用的解决方案始终是管道到less,所以

curl -i https://api.github.com/users | less

或者

curl -s -D - https://api.github.com/users | less

将完成这项工作。

于 2014-11-05T13:44:44.760 回答
32

也许这有点极端,但我使用的是这个超短版本:

curl -svo. <URL>

解释:

-v打印调试信息(包括标题)

-o.将网页数据(我们想忽略)发送到某个文件,.在这种情况下,该文件是一个目录,并且是一个无效的目标,并使输出被忽略。

-s没有进度条,没有错误信息(否则你会看到Warning: Failed to create the file .: Is a directory

警告:结果总是失败(就错误代码而言,是否可达)。不要在 shell 脚本中的条件语句中使用...

于 2019-03-14T14:10:34.510 回答
19

更容易——这是我用来避免短链接跟踪的方法——如下:

curl -IL http://bit.ly/in-the-shadows

…它也遵循链接

于 2016-03-10T21:18:03.660 回答
14

虽然其他答案在所有情况下都不适用于我,但我能找到的最佳解决方案(也可以使用POST),取自这里

curl -vs 'https://some-site.com' 1> /dev/null

于 2016-02-14T09:23:06.573 回答
9

headcurl.cmd (windows 版)

curl -sSkv -o NUL %* 2>&1
  • 我不想要进度条-s
  • 但我确实想要错误-S
  • 不用担心有效的 https 证书-k
  • 变得冗长-v(这是关于故障排除,是吗?),
  • 没有输出(以干净的方式)。
  • 哦,我想将stderr转发到stdout,所以我可以对整个事情进行 grep(因为大多数或所有输出都来自 stderr)
  • %*表示[将所有参数传递给此脚本](嗯(https://stackoverflow.com/a/980372/444255),通常这只是一个参数:您正在测试的 url

实际示例(关于解决代理问题):

C:\depot>headcurl google.ch | grep -i -e http -e cache
Hostname was NOT found in DNS cache
GET HTTP://google.ch/ HTTP/1.1
HTTP/1.1 301 Moved Permanently
Location: http://www.google.ch/
Cache-Control: public, max-age=2592000
X-Cache: HIT from company.somewhere.ch
X-Cache-Lookup: HIT from company.somewhere.ch:1234

Linux 版本

对于您的.bash_aliases/ .bash_rc

alias headcurl='curl -sSkv -o /dev/null $@  2>&1'
于 2019-11-29T08:31:45.460 回答