V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
ekousp
V2EX  ›  Linux

请教:curl/wget 一个网站首页的时候源码获取不完整

  •  
  •   ekousp · 2014-02-13 13:08:03 +08:00 · 8932 次点击
    这是一个创建于 3963 天前的主题,其中的信息可能已经有所发展或是发生改变。
    使用 curl acbnewsonline.com.au 时,发现获取的源代码不完整,使用浏览器打开是没有问题的。
    我看了下这个网站响应头,编码是chunked,跟这个有关系吗?
    17 条回复    1970-01-01 08:00:00 +08:00
    jakwings
        1
    jakwings  
       2014-02-13 13:12:39 +08:00   ❤️ 1
    检查一下 UserAgent ?
    horsley
        2
    horsley  
       2014-02-13 13:19:22 +08:00
    有的内容是js动态加载的?
    ekousp
        3
    ekousp  
    OP
       2014-02-13 13:55:30 +08:00
    @horsley 不是,是原始的html没有吐完整。
    @jakwings 和UA有关系吗?这个网站前端没有做这方面的检测。
    notsobad
        4
    notsobad  
       2014-02-13 13:55:33 +08:00   ❤️ 1
    curl --compressed acbnewsonline.com.au
    ekousp
        5
    ekousp  
    OP
       2014-02-13 13:56:25 +08:00
    @notsobad 果然可以了!谢谢!是由于启用了gzip压缩的缘故吗?
    ekousp
        6
    ekousp  
    OP
       2014-02-13 13:56:40 +08:00
    @notsobad 这个原因怎么理解。
    notsobad
        7
    notsobad  
       2014-02-13 14:02:25 +08:00   ❤️ 2
    @ekousp 浏览器默认请求的是压缩的内容,curl默认请求非压缩内容
    jakwings
        8
    jakwings  
       2014-02-13 14:12:23 +08:00
    @notsobad Thanks. 第一次知道还有这么麻烦的事情。Google 了一下,发现了这篇东东:

    http://stackoverflow.com/questions/8364640/how-to-properly-handle-a-gzipped-page-when-using-curl

    有人根据 HTTP 1.1 的规范指出这是 curl 的 bug ……
    pubby
        9
    pubby  
       2014-02-13 14:16:24 +08:00
    @ekousp 网速太慢了? 不开压缩时传输过程中超时了
    learnshare
        10
    learnshare  
       2014-02-13 16:00:04 +08:00
    jakwings
        11
    jakwings  
       2014-02-13 16:14:33 +08:00
    @learnshare 无语,你试过 wget 上面的网址了吗?至少我没在 manpage 发现任何有关请求压缩格式的请求头的特别说明,在你给的文章中也没找到压缩两个字。
    learnshare
        12
    learnshare  
       2014-02-13 17:15:55 +08:00
    @jakwings 刚刚测试过了,测试命令:

    wget -i http://acbnewsonline.com.au/ -F -x --ignore-tags=a -k

    断网后本地打开,页面不完整。原因应该有两个:
    1. 页面内容通过 JS/Ajax 生成,wget 无力;
    2. 某段 JS 报错了。

    Wget 只适合爬静态页面和文件,不过的确是支持 gzip 压缩的,参考 http://www.cyberciti.biz/faq/unix-linux-wget-download-compressed-gzip-headers/
    jakwings
        13
    jakwings  
       2014-02-13 17:27:21 +08:00
    @learnshare 好吧,你看 3 楼……
    pubby
        14
    pubby  
       2014-02-13 19:06:52 +08:00
    测试了一下,果然奇葩。 绝对是服务器端有问题
    pityonline
        15
    pityonline  
       2014-02-13 20:06:02 +08:00 via iPhone
    chunked 是动态生成的吧?
    VYSE
        16
    VYSE  
       2014-02-14 00:00:57 +08:00
    这个nginx估计用了什么加速插件,GET里有
    Accept-Encoding: deflate, gzip
    时候才不是chunked response
    浏览器里的 Accept-Encoding: gzip, deflate都不行
    wget,curl命令行应该是不支持download chunked
    试试aria2
    VYSE
        17
    VYSE  
       2014-02-14 00:22:17 +08:00   ❤️ 1
    @VYSE 错了,curl是支持chunked,问题是server竟然在Accept-Encoding: identity chunked传输中close connection
    必须加header "Accept-Encoding: deflate,gzip"
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   974 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:27 · PVG 04:27 · LAX 12:27 · JFK 15:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.