使用curl显示最终重定向头

使用curl显示最终重定向头,curl,Curl,curl命令: curl -IL "http://www.bbc.co.uk" 返回: HTTP/1.1 301 Moved Permanently Server: nginx X-BBC-No-Scheme-Rewrite: 1 X-Cache-Action: HIT X-Cache-Hits: 18686 Vary: X-BBC-Edge-Scheme Cache-Control: public, max-age=3600 X-Cache-Age: 2624 Content-Type: t

curl命令:

curl -IL "http://www.bbc.co.uk"
返回:

HTTP/1.1 301 Moved Permanently
Server: nginx
X-BBC-No-Scheme-Rewrite: 1
X-Cache-Action: HIT
X-Cache-Hits: 18686
Vary: X-BBC-Edge-Scheme
Cache-Control: public, max-age=3600
X-Cache-Age: 2624
Content-Type: text/html
Date: Thu, 02 Nov 2017 16:55:53 GMT
Location: https://www.bbc.co.uk/
Content-Length: 178
Connection: Keep-Alive

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
ETag: W/"3fdf4-XNfGeb/Aqcmv8OYZKVQdoUFYC34"
X-Frame-Options: SAMEORIGIN
Content-Length: 261620
Date: Thu, 02 Nov 2017 16:55:53 GMT
Connection: keep-alive
Set-Cookie: BBC-UID=65699f7bb41e91e9d7e103d8618f7780367bf9e637843476ca70678244f407000curl/7.19.7%20(x86_64-redhat-linux-gnu)%20libcurl/7.19.7%20NSS/3.19.1%20Basic%20ECC%20zlib/1.2.3%20libidn/1.18%20libssh2/1.4.2; expires=Mon, 01-Nov-21 16:55:53 GMT; path=/; domain=.bbc.co.uk
X-Cache-Action: HIT
X-Cache-Hits: 5
X-Cache-Age: 0
Cache-Control: private, max-age=0, must-revalidate
Vary: Accept-Encoding, X-CDN, X-BBC-Edge-Scheme
(在生产中,我使用
-I
而不是
-I
来获取整个有效负载)


如何让curl隐藏发出重定向的前面的头,并只返回最终目标资源的头?

curl中没有这样的选项,但是这个简单的
sed
程序就是您所需要的:

sed '/^HTTP\/1.1 3[0-9][0-9]/,/^\r$/d' file
如果将
curl
输出通过管道传输,它将删除(请注意末尾的)所有以任何
3xx
重定向代码(
HTTP/1.13[0-9][0-9]
)开头的头块,并以空行结束(Unix中的空行实际上仅为
\n
,在
sed
模式下可识别,但HTTP头使用DOS换行序列
\r\n
,在
sed
剥离后,它变成
\r
;因此我们必须匹配
^\r$
)。要选择一系列行,请使用sed


例如:

$ curl -sIL "http://www.bbc.co.uk" | sed '/^HTTP\/1.1 3[0-9][0-9]/,/^\r$/d'
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
ETag: W/"3fbed-SZN5fj1ugmv3uhAJWfQBrAvzK1M"
X-Frame-Options: SAMEORIGIN
Content-Length: 261101
Date: Thu, 02 Nov 2017 22:53:19 GMT
Connection: keep-alive
Set-Cookie: BBC-UID=95994f2b2a4bf...57f26d5442240curl/7.50.1; expires=Mon, 01-Nov-21 22:53:19 GMT; path=/; domain=.bbc.co.uk
X-Cache-Action: HIT
X-Cache-Hits: 649
X-Cache-Age: 119
Cache-Control: private, max-age=0, must-revalidate
Vary: Accept-Encoding, X-CDN, X-BBC-Edge-Scheme
同样,对于完整响应(带主体):


请注意上面我们用来抑制
curl
进度输出的
-s
标志。

警告任何读到这篇文章的人(在这篇文章上花了2个小时!)如果使用POST,curl只会将数据有效负载发送到第一个URL。重定向URL只会是GETs()是的,它在。
$ curl -siL "http://www.bbc.co.uk" | sed '/^HTTP\/1.1 3[0-9][0-9]/,/^\r$/d'