2010-06-19 100 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操作之前)。