2012-09-07 33 views
1

我是一名開發人員,一直致力於RSS閱讀器。Android 4.0保存asp頁面的內容供脫機查看

我試圖從我的應用程序下載網頁進行脫機查看,但我遇到了一些問題。 當我嘗試下載一個asp頁面時,我似乎沒有得到正確的內容,而是一個帶有asp窗體小部件的html頁面。

任何人都可以幫助我理解正在發生的事情以及我可能如何下載頁面內容?

我還應該提到網頁是使用https ssl身份驗證的共享點網頁,使用httpclient作爲我的手段來連接和下載網頁。

+0

這聽起來更像是一個服務器端問題(服務器提供錯誤的內容),而不是客戶端問題 –

+0

您對asp窗體小部件有什麼意思。在SharePoint頁面上,幾乎整個內容都是表單的一部分。所以頁面上會有一個HTML表單元素。當您使用普通瀏覽器訪問內容時,是否將您下載的內容與網頁內容進行了比較?另一個問題可能是您必須先進行身份驗證才能訪問您請求的實際頁面。也許你可以發佈你收到的內容。 – Flo

回答

0

要與ASP通信,您通常需要在您的HttpPost和其他請求中發送__VIEWSTATE和_ EVENTVALIDATION標記。您可以通過在基本頁面上調用HttpGet並使用正則表達式或簡單的str.contains(「 _VIEWSTATE」)來使用Patten,並將其從HTML中剝離出來並隨每個請求發送。

如果你沒有做任何職位,只是基本的GET,然後確保你正確設置標頭,像這樣:

HttpGet req = new HttpGet("YOUR SITE'S URL");   
req.setHeader("Content-Type", "application/x-www-form-urlencoded"); 
req.setHeader("Host", "YOUR SITE'S ROOT PAGE"); 
req.setHeader("User-Agent", "Mozilla/5.0 ..."); 
req.setHeader("Accept-Encoding", "gzip,deflate,sdch"); 
req.setHeader("Accept", "text/html,application/xhtml+xml,application/xml"); 
req.setHeader("Accept-Language", "en-us,en"); 
req.setHeader("Accept-Charset", "ISO-8859-1,utf-8"); 
HttpResponse resp = client.execute(req, localContext); 

不要忘了,你可以存儲可能的會話cookie在HttpContext的,也有通過在每一個執行上述所見:

CookieStore cookieStore = new BasicCookieStore(); 
HttpContext localContext = new BasicHttpContext(); 
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); 

去了解它在理論上最好的辦法就是下載Fiddler,運行在Chrome網站,看看發生了什麼事,並模擬實際瀏覽器請求您的應用:http://www.fiddler2.com/fiddler2/