• WebClient异步请求


    WebClient异步请求

    public String getHtmlPageResponse(String url) throws Exception {
    
        //请求超时时间,默认20秒
        int timeout = 20000;
        //等待异步JS执行时间,默认20秒
        int waitForBackgroundJavaScript = 20000;
        String result = "";
    
        final WebClient webClient = new WebClient(BrowserVersion.CHROME);
        
        webClient.getOptions().setThrowExceptionOnScriptError(false);//当JS执行出错的时候是否抛出异常
        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);//当HTTP的状态非200时是否抛出异常
        webClient.getOptions().setActiveXNative(false);
        webClient.getOptions().setCssEnabled(false);//是否启用CSS
        webClient.getOptions().setJavaScriptEnabled(true); //很重要,启用JS
        
        
        webClient.setCssErrorHandler(new SilentCssErrorHandler());    
        webClient.setJavaScriptErrorListener(new JavaScriptErrorListener(){
    
            public void scriptException(HtmlPage page, ScriptException scriptException) {
                // TODO Auto-generated method stub
                System.out.println("scriptException");
            }
    
            public void timeoutError(HtmlPage page, long allowedTime, long executionTime) {
                // TODO Auto-generated method stub
                System.out.println("timeoutError");
            }
    
            public void malformedScriptURL(HtmlPage page, String url, MalformedURLException malformedURLException) {
                // TODO Auto-generated method stub
                System.out.println("malformedScriptURL");
            }
    
            public void loadScriptError(HtmlPage page, URL scriptUrl, Exception exception) {
                // TODO Auto-generated method stub
                System.out.println("loadScriptError");
            }
    
            public void warn(String message, String sourceName, int line, String lineSource, int lineOffset) {
                // TODO Auto-generated method stub
                System.out.println("warn");
            }});
        
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());//很重要,设置支持AJAX
    
        //webClient.getOptions().setThrowExceptionOnScriptError(false);
    
        
        webClient.getOptions().setTimeout(timeout);//设置“浏览器”的请求超时时间
        webClient.setJavaScriptTimeout(timeout);//设置JS执行的超时时间
    
        HtmlPage page;
        try {
            page = webClient.getPage(url);
        } catch (Exception e) {
            webClient.close();
            throw e;
        }
        webClient.waitForBackgroundJavaScript(waitForBackgroundJavaScript);//该方法阻塞线程
    
        result = page.asXml();
        webClient.close();
    
        return result;
    }

    ##############

  • 相关阅读:
    Python 处理时间的模块
    C# 委托在线程与UI界面之间的应用
    C# 自己动手实现Spy++(二)
    C# 自己动手实现Spy++(一)
    VS2008自定义快捷键设置
    C#深入解析委托——C#中为什么要引入委托
    C# 线程 在 sleep,suspend 之后 Abort 的方法
    C#多线程学习笔记之(abort与join配合使用)
    使用命名管道的OVERLAPPED方式实现非阻塞模式编程 .
    C++和C#进程之间通过命名管道通信(上)
  • 原文地址:https://www.cnblogs.com/herd/p/16097620.html
Copyright © 2020-2023  润新知