当我向服务器发送请求时,我想看到curl所做的请求头。我要怎么检查呢?


当前回答

我知道这有点晚了,但我最喜欢的方法是netcat,因为你得到了确切的旋度发送;这可能与——trace或——trace-ascii选项不同,后者不会正确显示非ascii字符(它们只显示为点或需要解码)。

你可以很容易地通过打开两个终端窗口,在第一种类型:

nc -l localhost 12345

这将在本地机器的端口12345上打开一个监听进程。

在第二个终端窗口中输入curl命令,例如:

curl --form 'foo=bar' localhost:12345

在第一个终端窗口中,您将确切地看到请求中发送的curl。

当然现在nc不会发送任何响应(除非你自己输入),所以你需要中断curl命令(control-c),并为每个测试重复这个过程。

然而,这对于简单地调试请求是一个有用的选项,因为您不需要在任何地方进行往返,也不需要在任何地方生成虚假的迭代请求,直到您得到正确的请求;一旦你对这个命令感到满意,只需将它重定向到一个有效的URL,你就可以开始了。

您也可以为任何cURL库做同样的事情,只需编辑您的请求以指向本地nc侦听器,直到您满意为止。

其他回答

如下所示的命令将显示三个部分:请求头、响应头和数据(由CRLF分隔)。它避免了curl添加的技术信息和语法噪声。

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

<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="https://stackoverflow.com/">here</a></body>

描述:

-vs -添加报头(-v)但删除进度条(-s) 2>&1 -将stdout和stderr合并为单个stdout 使用下面的命令由curl生成的Sed编辑响应 /^* /d -删除以“*”开头的行(技术信息) $/d -删除以'bytes data]结尾的行(技术信息) S /> // -删除'> '前缀 S /< // -删除'< '前缀

将报头转储到一个文件中,将响应的有效负载转储到另一个文件中

curl -k -v -u user:pass  "url" --trace-ascii headers.txt >> response.txt

curl的——trace-ascii选项将显示请求头,以及响应头和响应体。

例如,命令

curl --trace-ascii curl.trace http://www.google.com/ 

生成文件旋度。开始的跟踪如下:

== Info: About to connect() to www.google.com port 80 (#0)
== Info:   Trying 209.85.229.104... == Info: connected
== Info: Connected to www.google.com (209.85.229.104) port 80 (#0)
=> Send header, 145 bytes (0x91)
0000: GET / HTTP/1.1
0010: User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3
0050:  OpenSSL/0.9.7l zlib/1.2.3
006c: Host: www.google.com
0082: Accept: */*
008f: 

它还得到了一个响应(准确地说,是302响应,但不相关),该响应被记录下来。


如果你只想保存响应头,使用——dump-header选项:

curl -D file url
curl --dump-header file url

如果您需要更多关于可用选项的信息,请少使用curl——help |(它产生几百行输出,但提到了很多选项)。或者找到手册页,那里有更多关于选项含义的解释。

您可以使用wireshark或tcpdump来查看任何网络流量(http也可以)。

curl -s -v -o/dev/null -H "Testheader: test" http://www.example.com

如果你想发送HEAD请求而不是GET请求,你也可以使用-I选项。