執行httpclient.execute()方法 java程序卡住不動 沒法繼續運行

主函數調用crawl子函數,調用第一次正常執行,調用第二次就卡住了,停滯不動,不報錯但一直在運行沒有結果
html

通過print差錯發現,在crawl子函數內部的重定向後,第二次執行httpclient.execute()方法時程序卡住了,一直在運行但也不報錯java

crawl.java子函數代碼以下:cookie

    public String crawl(String url) {
        String result="";
        crawlRedirect = false;
        System.out.println("inside crawl");
        //禁用get重定向後自動跳轉
        client.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS, false);    
        HttpGet httpget = new HttpGet(url); 
        HttpResponse response;
        try {
            response = client.execute(httpget);
            System.out.println("execute over");
            if(response.getStatusLine().getStatusCode()==302){
                System.out.println("302重定向了 須要登陸↓↓↓↓");
                crawlRedirect = true;      
            }
            //打開get重定向自動跳轉後,再get訪問一次原url
            DefaultHttpClient client2 = new DefaultHttpClient(new ThreadSafeClientConnManager());  //加入新client後程序正常
            client2.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS, true); 
            System.out.println("setParameter over");
            HttpGet httpget2 = new HttpGet(url); 
            System.out.println("new http over");
            HttpResponse response2 = client2.execute(httpget2);  //本來的程序在這裏會卡住,本來的clien用的是class的全局實例變量,改成新聲明的client2後沒有問題了
            System.out.println("execute again over");
            //System.out.println(response2.getStatusLine().toString()); // HTTP/1.1 302 Found 
            // 獲取Entity  
            HttpEntity entity = response2.getEntity();  
            // 解析html
            result = EntityUtils.toString(entity);
            //打印爬取結果
            //System.out.print(result);  
        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.print("IOException");  
            e.printStackTrace();
        }
        
        return result;
        
    }

參考文章: httpclient.execute()不執行也不報錯解決辦法
ide

這段代碼實際上是沒有任何問題的,全部的變量我都調試過,都有值,
可是就是執行到httpclient.execute()的時候就是不執行,我猜測是否是由於httpclient實例已經沒有了,是否是已經被java的回收器回收了。
因而我就重新new 了一個,放了進去,將原來的cookie也放進去,就能夠作到同一個cookie訪問了
修改後添加代碼爲
函數

按照博主的方法從新new聲明瞭一個新的client以後就行了!!
因此到底爲何呢??以前的httpclient爲何會被收回呢?

url

相關文章
相關標籤/搜索