1

我是一名初级开发人员,一直在开发 RSS 阅读器。

我正在尝试从我的应用程序下载网页以供离线查看,但我遇到了一些问题。当我尝试下载一个 asp 页面时,我似乎没有得到正确的内容,而是一个带有 asp 表单小部件的 html 页面。

谁能帮助我了解正在发生的事情以及如何下载页面内容?

我还应该提到该网页是使用 https ssl 身份验证的共享点网页,使用 httpclient 作为连接和下载网页的手段。

4

1 回答 1

0

要与 ASP 通信,您通常需要在 HttpPost 和其他请求中发送 __VIEWSTATE 和 _ EVENTVALIDATION 令牌。您可以通过在基本页面上调用 HttpGet 并将 Patten 与正则表达式或简单的 str.contains(" _VIEWSTATE") 一起使用,然后将其从 HTML 中剥离并随每个请求一起发送来获取这些内容。

如果你没有做任何 POST,只是基本的 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);

不要忘记您可以存储在 httpcontext 中的可能会话 cookie,并且还可以在每次执行时传入,如上所示:

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

理论上最好的方法是下载 Fiddler,在 Chrome 中运行该站点,查看发生了什么并在您的应用程序中模拟实际的浏览器请求:http ://www.fiddler2.com/fiddler2/

于 2012-09-08T00:14:15.903 回答