0

是否可以使用 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,也没有任何图像。也许我必须尝试别的?你能帮我吗?

谢谢和对不起我的英语。

4

1 回答 1

0

正如这里提到的:HttpClient 从响应中获取图像DefaultHttpClient/HttpClient获取只有一个内容,在您的情况下,它是一个 HTML 页面(来自:http://www.mysite/login.jsp)。您需要解析该 HTML 页面并使用它的 src 获取指定的 img 标记,而您只需下载它(仅此而已,无需重新发送 login.jsp 请求!)。如果您下载验证码图像,您需要尽快获取该图像,否则可能会被尝试登录的其他用户覆盖。

与浏览器一样,您需要以相同的方式下载 HTML,而不是解析它,而不是请求所有 src/link/ect 取决于您的需要。

DefaultHttpClient默认情况下不缓存。

CachingHttpClient默认情况下启用缓存,在这种情况下,您需要分析 If-Modified-Since 和 If-None-Match 标头以确定是否执行对远程服务器的请求,或者是否从缓存返回其结果。如果服务器上没有更改,您将获得缓存的数据,如果您之前缓存过。

于 2016-01-11T21:36:15.013 回答