2010-02-11 22 views

Trả lời

6

Những gì tôi đang làm ngay bây giờ là:

public static final HashMap<String, String> acceptTypes = new HashMap<String, String>(){{ 
     put("html", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 
     put("img", "image/png,image/*;q=0.8,*/*;q=0.5"); 
     put("script", "*/*"); 
     put("style", "text/css,*/*;q=0.1"); 
    }}; 

protected void downloadCssAndImages(HtmlPage page) { 
     String xPathExpression = "//*[name() = 'img' or name() = 'link' and @type = 'text/css']"; 
     List<?> resultList = page.getByXPath(xPathExpression); 

     Iterator<?> i = resultList.iterator(); 
     while (i.hasNext()) { 
      try { 
       HtmlElement el = (HtmlElement) i.next(); 

       String path = el.getAttribute("src").equals("")?el.getAttribute("href"):el.getAttribute("src"); 
       if (path == null || path.equals("")) continue; 

       URL url = page.getFullyQualifiedUrl(path); 

       WebRequestSettings wrs = new WebRequestSettings(url); 
       wrs.setAdditionalHeader("Referer", page.getWebResponse().getRequestSettings().getUrl().toString()); 

       client.addRequestHeader("Accept", acceptTypes.get(el.getTagName().toLowerCase())); 
       client.getPage(wrs); 
      } catch (Exception e) {} 
     } 



client.removeRequestHeader("Accept"); 
} 
0

HtmlUnit không tải xuống CSS hoặc hình ảnh. Họ là vô ích cho một trình duyệt không đầu ...

ngoái, tôi nghe nói về nó là ở đây, nhưng vé được đánh dấu riêng: http://osdir.com/ml/java.htmlunit.devel/2007-01/msg00021.html

+1

gì nếu người dùng muốn kiểm tra các css hoặc hình ảnh với một trình duyệt không đầu? Điều đó dường như được ngụ ý bởi câu hỏi. Tôi đoán css và hình ảnh sẽ không vô ích, phải không? Trong thực tế, đó là những gì đã dẫn tôi đến câu hỏi này, nó sẽ là tốt đẹp nếu tôi có thể sử dụng một trình duyệt không đầu để kiểm tra một hình ảnh bằng kích thước hoặc băm hoặc một css cho các giá trị của một màu nền. Đang cố gắng giúp đỡ ở đây ... câu trả lời của bạn đi ra một chút tranh cãi hơn là xây dựng. – fooMonster

1

nguồn: How to get base64 encoded contents for an ImageReader?

HtmlImage img = (HtmlImage) p.getByXPath("//img").get(3); 
ImageReader imageReader = img.getImageReader(); 
BufferedImage bufferedImage = imageReader.read(0); 
String formatName = imageReader.getFormatName(); 
ByteArrayOutputStream byteaOutput = new ByteArrayOutputStream(); 
Base64OutputStream base64Output = new base64OutputStream(byteaOutput); 
ImageIO.write(bufferedImage, formatName, base64output); 
String base64 = new String(byteaOutput.toByteArray()); 
1

đây là những gì tôi đã đưa ra:

public InputStream httpGetLowLevel(URL url) throws IOException 
{ 
    WebRequest wrq=new WebRequest(url); 

    ProxyConfig config =webClient.getProxyConfig(); 

    //set request webproxy 
    wrq.setProxyHost(config.getProxyHost()); 
    wrq.setProxyPort(config.getProxyPort()); 
    wrq.setCredentials(webClient.getCredentialsProvider().getCredentials(new AuthScope(config.getProxyHost(), config.getProxyPort()))); 
    for(Cookie c:webClient.getCookieManager().getCookies(url)){ 
     wrq.setAdditionalHeader("Cookie", c.toString());    
    }   
    WebResponse wr= webClient.getWebConnection().getResponse(wrq); 
    return wr.getContentAsStream(); 
} 

xét nghiệm của tôi cho thấy, rằng nó proxys hỗ trợ và rằng nó không chỉ mang cookie từ WebClient, mà còn nếu máy chủ gửi cookie mới trong phản ứng, WebClient sẽ ăn những cookie

Các vấn đề liên quan