是否可以使用HttpClient加载登录页面,并从缓存中获取img元素的图像文件,而不是从src链接获取,而不重新加载?这很重要,因为我需要为刚加载的页面保存验证码,如果我尝试从src链接加载它,它将是另一个验证码。我试过了:
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("http://www.mysite/login.jsp");
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
InputStream instream = entity.getContent();
OutputStream outstream = new FileOutputStream("d://file.html");
org.apache.commons.io.IOUtils.copy(instream, outstream);
outstream.close();
instream.close();
但没有任何图像。我也尝试过来自selenium库的HtmlUnitDriver
,也没有任何图像。也许我必须尝试其他的东西?你能帮帮我吗?
谢谢,对不起我的英语。
答案 0 :(得分:0)
如上所述:HttpClient Get images from response DefaultHttpClient
/ HttpClient
只获得一个内容,在您的情况下,它是一个HTML页面(由:http://www.mysite/login.jsp)。你需要解析那个HTML页面并获得指定的img标签,而不是你只需要下载它(只需要重新发送login.jsp请求!)。如果您下载验证码图像,则需要尽快获取该图像,否则可能会被试图登录的其他用户覆盖。
正如浏览器所做的那样,你需要以相同的方式,下载HTML,而不是解析它,而不是请求所有src / link / ect取决于你需要的。
DefaultHttpClient
默认情况下不会缓存。
CachingHttpClient
缓存,在这种情况下,您需要分析If-Modified-Since和If-None-Match标头,以确定是否执行了对远程服务器的请求,或者是否结果从缓存返回。如果服务器上没有任何更改,如果您先前已缓存,则会获得缓存数据。