cURL - 扫描网站的来源

时间:2010-06-19 01:54:39

标签: linux bash curl

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

2 个答案:

答案 0 :(得分:4)

当我去那个页面时,我首先看不到“获得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,发送请求发送邮政编码,然后再离开。

答案 1 :(得分:0)

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

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