2010-06-19 101 views
1

我试图使用BASH中的程序cURL来下载网页的源代码。当页面使用比简单HTML更复杂的编码时,尝试下载页面代码时遇到困难。比如我想用下面的命令来查看以下页面的源代码:cURL - 扫描网站的源代码

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的来源显然是找到。我尝试翻阅手册页,但是我对这个问题的了解不够充分,无法找出可能的解决方案。

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

编辑:

在下面的建议,我也包括在内,但没有成功一个用户代理切换:

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" 

回答

4

我没有看到摆在首位“访问到4G速度”的事情时,我转到该页面。

这种差异的两个最可能的罪魁祸首是饼干和你的用户代理。

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

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)然后复制过来的默认文本。确保你的冲刺页面上,当你坚持,在地址栏(否则你会错了网站的Cookie结束)


EDIT 2

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

我之所以没有看到第一次访问4G速度的原因是因为我没有输入我的邮政编码。

如果你想有一个不断有关的cookie,你可以强制卷曲做任何需要获得该cookie,在这种情况下,输入邮政编码。

在袅袅,你可以用多个请求做到这一点,拿着一饼干罐取出饼干:

[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) 

所以只需指定一个饼干罐,将请求发送到发送邮政编码,然后工作了。

+0

权埃沃下 - 更多视图\t HTC EVO™4G *接入到4G的速度是比3G高达10倍的速度更快 *双模3G/4G设备,获得可靠的3G – Ryan 2010-06-19 02:09:45

+0

谢谢吨!!如果你有第二个问题,我的最后一个问题是,如果这个cookie会持续足够长的时间来运行一段时间的脚本?或者我将不得不再次自动下载这个cookie? – Ryan 2010-06-19 02:27:44

0

如果从相同的源服务器获取不同的源代码,最likelly嗅探用户代理,并铺设专用代码。

的Javascript可以作用于DOM,做各种各样的事情,但如果你用“查看源文件”的代码将是完全一样的一个浏览器第一次读(DOM操作之前)。