我是一名初级开发人员,一直在开发 RSS 阅读器。
我正在尝试从我的应用程序下载网页以供离线查看,但我遇到了一些问题。当我尝试下载一个 asp 页面时,我似乎没有得到正确的内容,而是一个带有 asp 表单小部件的 html 页面。
谁能帮助我了解正在发生的事情以及如何下载页面内容?
我还应该提到该网页是使用 https ssl 身份验证的共享点网页,使用 httpclient 作为连接和下载网页的手段。
我是一名初级开发人员,一直在开发 RSS 阅读器。
我正在尝试从我的应用程序下载网页以供离线查看,但我遇到了一些问题。当我尝试下载一个 asp 页面时,我似乎没有得到正确的内容,而是一个带有 asp 表单小部件的 html 页面。
谁能帮助我了解正在发生的事情以及如何下载页面内容?
我还应该提到该网页是使用 https ssl 身份验证的共享点网页,使用 httpclient 作为连接和下载网页的手段。
要与 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/