【问题标题】:cURL - scanning a website's sourcecURL - 扫描网站的来源
【发布时间】:2010-06-19 01:54:38
【问题描述】:

我试图使用 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"

即使在 Firefox 源代码中清楚地找到了该短语。我尝试浏览手册页,但我对问题的了解不够,无法找出可能的解决方案。

一个更可取的答案将包括为什么这不按我期望的方式工作,以及使用 curl 或其他可从 Linux 机器执行的工具来解决该问题。

编辑:

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

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"

【问题讨论】:

    标签: linux bash curl


    【解决方案1】:

    当我转到那个页面时,我首先没有看到“访问 4G 速度”的东西。

    造成这种差异的两个最可能的罪魁祸首是 cookie 和您的用户代理。

    您可以使用curlwget 手动指定cookie。使用任何你想要的插件从 Firefox 中转储你的 cookie,或者只是

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

    在您的地址栏中 然后继续阅读 wget 或 curl 的手册页,看看如何包含该 cookie。


    编辑: 这似乎是我的想法,缺少 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,发送请求以发送邮政编码,然后就可以工作了。

    【讨论】:

    • Evo 正下方 - 更多浏览量 HTC EVO™ 4G * 使用比 3G 快 10 倍的 4G 速度 * 双模 3G/4G 设备,使用可靠的 3G
    • 非常感谢!!如果你有第二个问题,我的最后一个问题是这个 cookie 是否会持续足够长的时间来运行这个脚本一段时间?还是我必须再次自动下载此 cookie?
    【解决方案2】:

    如果您从服务器所在的同一来源获取不同的源代码,很可能会嗅探您的用户代理并布置特定代码。

    Javascript 可以作用于 DOM 并执行各种操作,但如果您使用“查看源代码”,则代码将与您的浏览器第一次读取的代码完全相同(在 DOM 操作之前)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      相关资源
      最近更新 更多