Board logo

标题: [其他] curl 请求压缩后的网页并自动解压 [打印本页]

作者: tmplinshi    时间: 2015-10-27 00:37     标题: curl 请求压缩后的网页并自动解压

本帖最后由 tmplinshi 于 2015-10-27 01:05 编辑

今天在使用抓包工具 Charles 的时候,在长长的右键菜单中无意间瞥见了个菜单“Copy cURL Request”,然后我又想起本论坛的网友依山居在多个帖子中这么干过,于是乎我也想干一回...
从复制到的结果中看到个参数 --compressed,查了下官方文档,其说明为:
--compressed

(HTTP) Request a compressed response using one of the algorithms curl supports, and save the uncompressed document. If this option is used and the server sends an unsupported encoding, curl will report an error.

意思是,curl 会向网站请求压缩后的文档(gzip格式),然后会自动解压返回解压后的数据。

这个功能是非常有用的。网页经过 gzip 压缩后普遍能减少 60% 以上的体积,这样能大大提高 http 请求的速度。



请求压缩后的数据也可以用 -H 参数添加请求头。例如:
  1. curl http://www.baidu.com -H "Accept-Encoding: gzip, deflate" -o baidu.gz
复制代码
不过这样下载的就是 gzip 文件,curl 不会把内容解压出来。

另外的话,并不是所有网站都支持返回压缩后的数据。
那如何判断某个网页是否支持压缩呢?也很简单,只要向网页请求压缩后的数据,然后判断 http 的响应头,如果里面包含 Content-Encoding: gzip,那么就是支持的。
C:\>curl -I --compressed ip.cn
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Mon, 26 Oct 2015 16:32:19 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.4.43-1~dotdeb+7.1
Content-Encoding: gzip


-I 参数作用是进行 HEAD 请求,只获取响应头,而不获取内容。
作者: 依山居    时间: 2015-10-27 00:50

chrome 开发者工具也支持curl cmd 直接复制出来。
作者: tmplinshi    时间: 2015-10-27 00:55

回复 2# 依山居


    多谢指点。看到了:


作者: 依山居    时间: 2015-10-27 01:13

感叹一下,当年只知道用nc 重放http请求。还经常莫名发送不出去。
如今现在的抓包工具都集成重放HTTP请求的功能了。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2