代码之家  ›  专栏  ›  技术社区  ›  Ryan

curl-扫描网站源代码

  •  1
  • Ryan  · 技术社区  · 16 年前

    我试图使用bash中的curl程序下载网页的源代码。当页面使用比简单HTML更复杂的编码时,我在尝试下载页面代码时遇到了困难。例如,我尝试使用以下命令查看以下页面的源代码:

    curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones"
    

    但是,当我单击“查看源代码”时,结果与Firefox生成的源代码不匹配。我相信这是因为页面上有javascript元素,但我不能确定。

    例如,我不能:

    curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones" | grep "Access to 4G speeds"
    

    即使在火狐源代码中可以清楚地找到这个短语。我试着翻阅手册页,但我对这个问题的了解不够,无法找到可能的解决方案。

    一个更好的答案将包括为什么它不能像我期望的那样工作,以及使用curl或另一个可从Linux盒执行的工具来解决这个问题。

    编辑:

    根据下面的建议,我还包括了一个没有成功的useragent开关:

    curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones" -A "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3" | grep -i "Sorry"
    
    2 回复  |  直到 10 年前
        1
  •  4
  •   Jamie Wong    16 年前

    当我进入那个页面的时候,我首先看不到“访问4G速度”这一点。

    造成这种差异的两个最可能的原因是cookie和您的用户代理。

    您可以使用两者手动指定cookie curl wget . 使用任何你想要的插件从火狐中卸载你的cookie,或者

    javascript:prompt('',document.cookie);
    

    在你的位置栏 然后坚持阅读wget或curl的手册页,看看如何包括cookie。


    编辑 : 这似乎是我所想的,一块丢失的饼干。

    curl --cookie "INSERT THE COOKIE YOU GOT HERE" http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones | grep "Access to 4G"
    

    如上所述,您可以从上面获取您的cookie: javascript:prompt('',document.cookie) 然后复制出现的默认文本。当你把它贴到位置栏时,确保你在sprint页面上(否则你会得到错误网站的cookie)。


    编辑2

    浏览器cookie和shell cookie不同的原因是发生的交互不同。

    我没有看到你一开始说的4G速度的原因是我没有输入邮政编码。

    如果你想要一个持续相关的cookie,你可以强迫curl做任何需要的事情来获得这个cookie,在这种情况下,输入一个邮政编码。

    在curl中,您可以对多个请求执行此操作,并将检索到的cookie保存在cookie jar中:

     [stackoverflow]  curl --help | grep cookie
     -b/--cookie <name=string/file> Cookie string or file to read cookies from (H)
     -c/--cookie-jar <file> Write cookies to this file after operation (H)
     -j/--junk-session-cookies Ignore session cookies read from file (H)
    

    所以只需指定一个cookie jar,发送请求来发送zipcode,然后就可以工作了。

        2
  •  0
  •   Frankie    16 年前

    如果您从服务器所在的同一个源获取不同的源代码,最有可能是嗅探您的用户代理并列出特定的代码。

    JavaScript可以在DOM上执行各种操作,但是如果使用“see source”,代码将与浏览器首次读取的代码完全相同(在DOM操作之前)。

    推荐文章