我是一名初级开发人员,一直致力于RSS阅读器。
我正在尝试从我的应用下载网页以供离线观看,但我遇到了一些问题。 当我尝试下载一个asp页面时,我似乎没有得到正确的内容,而是一个带有asp窗口小部件的html页面。
任何人都可以帮助我了解正在发生的事情以及如何下载页面内容吗?
我还应该提到网页是一个使用https ssl身份验证的sharepoint网页,使用httpclient作为连接和下载网页的手段。
答案 0 :(得分: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/