命令行curl可以通过使用-D选项显示响应头,但我想看到它正在发送什么请求头。我该怎么做呢?
当前回答
verbose选项很方便,但如果你想看到curl所做的一切(包括传输的HTTP正文,而不仅仅是头部),我建议使用以下选项之一:
——trace-ascii - # stdout ——trace-ascii output_file.txt
其他回答
如果你想要更多的选择,你可以尝试安装一个现代的命令行HTTP客户端,如httpie,它适用于大多数操作系统的包管理器,如brew, apt-get, pip, yum等
- OSX
brew install httpie
然后,您可以在命令行上使用它与各种选项
http GET https://www.google.com
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
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
* Connection #0 to host google.com left intact
* Closing connection #0
如下所示的命令将显示三个部分:请求头、响应头和数据(由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 /< // -删除'< '前缀
一个显示响应头的流行答案,但OP询问请求头。
curl -s -D - -o /dev/null http://example.com
-s:避免显示进度条 - d -:将头文件转储到文件中,但-将其发送到标准输出 -o /dev/null:忽略响应体
这比-I更好,因为它不发送HEAD请求,这可能会产生不同的结果。
它比-v更好,因为你不需要那么多的技巧来简化它。
verbose选项很方便,但如果你想看到curl所做的一切(包括传输的HTTP正文,而不仅仅是头部),我建议使用以下选项之一:
——trace-ascii - # stdout ——trace-ascii output_file.txt
推荐文章
- 如何为已安装的Ubuntu LAMP堆栈启用cURL ?
- 为什么cURL返回错误“(23)Failed writing body”?
- 如何POST JSON数据与PHP卷曲?
- 使用curl在PHP中获取HTTP代码
- SSL证书错误:无法获得本地颁发者证书
- 从URL执行bash脚本
- PHP中的cURL是什么?
- 对bash脚本函数中定义的变量使用curl POST
- 使用curl POST multipart/form-data的正确方法是什么?
- PHP -调试Curl
- (1) libcurl不支持或禁用https协议
- 在尝试访问HTTPS url时,如何使用cURL处理证书?
- 如何使用PHP 7安装ext-curl扩展?
- 如何通过JSON文件传递有效载荷卷曲?
- 编写器安装错误——当它实际启用时需要ext_curl