当前位置:  开发笔记 > 编程语言 > 正文

如何使用命令行curl显示请求标头

如何解决《如何使用命令行curl显示请求标头》经验,为你挑选了7个好方法。

命令行curl可以通过使用-D选项显示响应头,但我想查看它发送的请求头.我怎样才能做到这一点?



1> Asaph..:

curl -v--verbose选项显示HTTP请求标头等.这是一些示例输出:

$ curl -v http://google.com/
* About to connect() to google.com port 80 (#0)
*   Trying 66.102.7.104... connected
* Connected to google.com (66.102.7.104) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.16.4 (i386-apple-darwin9.0) libcurl/7.16.4 OpenSSL/0.9.7l zlib/1.2.3
> Host: google.com
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Location: http://www.google.com/
< Content-Type: text/html; charset=UTF-8
< Date: Thu, 15 Jul 2010 06:06:52 GMT
< Expires: Sat, 14 Aug 2010 06:06:52 GMT
< Cache-Control: public, max-age=2592000
< Server: gws
< Content-Length: 219
< X-XSS-Protection: 1; mode=block
< 

301 Moved

301 Moved

The document has moved here. * Connection #0 to host google.com left intact * Closing connection #0


如果我只想构建包但不想发送它怎么办?

2> JaffaTheCake..:
curl -sD - -o /dev/null http://example.com

-s - 避免显示进度条

-D -- 将标头转储到文件,但-将其发送到stdout

-o /dev/null - 忽略响应体

这比-I不发送HEAD请求更好,这可能会产生不同的结果.

这比-v因为你不需要那么多黑客来解开它更好.


这个答案对我很有用,因为我也误解了这个问题.
阅读问题 - 这是针对响应标头而不是请求标头

3> evandrix..:

我相信你想要传递给curl的命令行开关是-I.

用法示例:

$ curl -I http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287  
HTTP/1.1 301 Moved Permanently
Date: Sat, 29 Dec 2012 15:22:05 GMT
Server: Apache
Location: http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287/
Content-Type: text/html; charset=iso-8859-1

此外,如果您遇到响应HTTP状态代码301,您可能还希望传递-L参数开关以告知curlURL重定向,并且在这种情况下,打印所有页面的标题(包括URL重定向),如下图所示:

$ curl -I -L http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287
HTTP/1.1 301 Moved Permanently
Date: Sat, 29 Dec 2012 15:22:13 GMT
Server: Apache
Location: http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287/
Content-Type: text/html; charset=iso-8859-1

HTTP/1.1 302 Found
Date: Sat, 29 Dec 2012 15:22:13 GMT
Server: Apache
Set-Cookie: UID=b8c37e33defde51cf91e1e03e51657da
Location: noaccess.php
Content-Type: text/html

HTTP/1.1 200 OK
Date: Sat, 29 Dec 2012 15:22:13 GMT
Server: Apache
Content-Type: text/html


`-I`选项导致curl执行`HTTP HEAD`,这可能会改变服务器的响应.我相信最好使用`-v`开关.
`-I`选项显示*response*标题.问题是关于*request*标题.
这是一个非常错误的答案.(我保证我在这里通常很善良.)1.它与OP要求的相反.它使用`HEAD`的请求方法而不是`GET`或`POST`.3.它永远不应该被用来"只看到标题",除非你试图看看你的服务器如何以不同的方式响应`HEAD`而不是`GET`.它大部分时间都是一样的,但并非总是如此.要仅查看标题,请使用`curl -o/dev/null -D/dev/stdout`.这将在100%的时间内给出预期的结果.

4> William Denn..:

详细选项很方便,但是如果你想看到curl所做的一切(包括传输的HTTP主体,而不仅仅是标题),我建议使用以下选项之一:

--trace-ascii - #stdout

--trace-ascii output_file.txt #file



5> Benibr..:

使用以下命令获得一个很好的标头输出:

 curl -L -v -s -o /dev/null google.de

-L, --location 按照重定向

-v, --verbose 更多输出,指示方向

-s, --silent 不显示进度条

-o, --output /dev/null 不显示收到的身体

或者更短的版本:

 curl -Lvso /dev/null google.de

结果是:

* Rebuilt URL to: google.de/
*   Trying 2a00:1450:4008:802::2003...
* Connected to google.de (2a00:1450:4008:802::2003) port 80 (#0)
> GET / HTTP/1.1
> Host: google.de
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Location: http://www.google.de/
< Content-Type: text/html; charset=UTF-8
< Date: Fri, 12 Aug 2016 15:45:36 GMT
< Expires: Sun, 11 Sep 2016 15:45:36 GMT
< Cache-Control: public, max-age=2592000
< Server: gws
< Content-Length: 218
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
<
* Ignoring the response-body
{ [218 bytes data]
* Connection #0 to host google.de left intact
* Issue another request to this URL: 'http://www.google.de/'
*   Trying 2a00:1450:4008:800::2003...
* Connected to www.google.de (2a00:1450:4008:800::2003) port 80 (#1)
> GET / HTTP/1.1
> Host: www.google.de
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 12 Aug 2016 15:45:36 GMT
< Expires: -1
< Cache-Control: private, max-age=0
< Content-Type: text/html; charset=ISO-8859-1
< P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."
< Server: gws
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
< Set-Cookie: NID=84=Z0WT_INFoDbf_0FIe_uHqzL9mf3DMSQs0mHyTEDAQOGY2sOrQaKVgN2domEw8frXvo4I3x3QVLqCH340HME3t1-6gNu8R-ArecuaneSURXNxSXYMhW2kBIE8Duty-_w7; expires=Sat, 11-Feb-2017 15:45:36 GMT; path=/; domain=.google.de; HttpOnly
< Accept-Ranges: none
< Vary: Accept-Encoding
< Transfer-Encoding: chunked
<
{ [11080 bytes data]
* Connection #1 to host www.google.de left intact

正如你可以看到curl输出和传入标题的输出,并跳过了bodydata,虽然告诉你身体有多大.

此外,对于每一行,指示方向以便于阅读.我发现追踪长链重定向特别有用.


我更喜欢这个比`-v`选项更高的选票.另外,为简洁起见,只要`o`出现在末尾,这也可以是`curl -Lvso/dev/null `.

6> igorpcholkin..:

类似于以下命令的命令将显示三个部分:请求标头,响应标头和数据(由CRLF分隔)。它避免了卷曲所带来的技术信息和语法噪音。

curl -vs www.stackoverflow.com 2>&1 | sed '/^* /d; /bytes data]$/d; s/> //; s/< //'

该命令将产生以下输出:

GET / HTTP/1.1
Host: www.stackoverflow.com
User-Agent: curl/7.54.0
Accept: */*

HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Location: https://stackoverflow.com/
Content-Length: 149
Accept-Ranges: bytes
Date: Wed, 16 Jan 2019 20:28:56 GMT
Via: 1.1 varnish
Connection: keep-alive
X-Served-By: cache-bma1622-BMA
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1547670537.588756,VS0,VE105
Vary: Fastly-SSL
X-DNS-Prefetch-Control: off
Set-Cookie: prov=e4b211f7-ae13-dad3-9720-167742a5dff8; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly

Document Moved

Object Moved

This document may be found here

描述:

-vs -添加标题(-v)但删除进度栏(-s)

2>&1 -将stdout和stderr合并为单个stdout

sed -使用以下命令编辑curl产生的响应

/^* /d -删除以“ *”开头的行(技术信息)

/bytes data]$/d -删除以“字节数据]”结尾的行(技术信息)

s/> // -删除'>'前缀

s/< // -删除'<'前缀



7> jpfx1342..:

在调试Web应用程序时,我必须自己克服这个问题.-v很棒,但对我的口味来说有点过于冗长.这是我提出的(仅限bash)解决方案:

curl -v http://example.com/ 2> >(sed '/^*/d')

这是有效的,因为输出来自-vstderr,而不是stdout.通过将其重定向到子shell,我们可以sed删除以其开头的行*.由于实际输出不通过子shell,因此不会受到影响.使用子shell有点笨拙,但这是将stderr重定向到另一个命令的最简单方法.(正如我所说,我只是用它进行测试,所以它适用于我.)

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有