2014-04-05 47 views
1

在舊庫4.0,你會簡單地做:如何處理httpclient 4.3+中的超時?

DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpParams params = httpClient.getParams(); 
HttpConnectionParams.setConnectionTimeout(httpParams, connectionTimeoutMillis); 
HttpConnectionParams.setSoTimeout(httpParams, socketTimeoutMillis); 

但現在DefaultHttpClient已被棄用,爲了創造你所要做的的HttpClient:

HttpClients.createDefault(); 

這是好的,但不允許我爲請求設置超時。那麼,是否有解決方法/方法而不返回到棄用的類?

回答

1

解決......在新的圖書館,這是方式:

private static HttpClient createHttpClient(){ 
    RequestConfig config = RequestConfig.custom() 
      .setSocketTimeout(TIMEOUT) 
      .setConnectTimeout(TIMEOUT) 
      .build(); 

    HttpClientBuilder hcBuilder = HttpClients.custom(); 
    hcBuilder.setDefaultRequestConfig(config); 

    return hcBuilder.build(); 
} 

你設置這個在RequestConfig對象,並把它傳遞給httpclientbuilder所以要建立自己的HTTP客戶端實例。

0

您可以使用java.net.HttpURLConnection和java.net.URL庫。我使用一個小的util類在我的應用程序中執行任何需要的http請求。它允許設置連接和讀取超時。

package utility; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class URLReader { 
    /** 
    * @param args 
    */ 
    public static String getURL(String p_URL) { 
     StringBuffer out = new StringBuffer(); 

     try { 
      //get default report id 
      URL url = new URL(p_URL); 

      HttpURLConnection huc = (HttpURLConnection) url.openConnection(); 
      HttpURLConnection.setFollowRedirects(false); 
      huc.setConnectTimeout(30 * 1000); 
      huc.setReadTimeout(300 * 1000); 
      huc.setRequestMethod("GET"); 
      huc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)"); 
      huc.connect(); 

      InputStream input = huc.getInputStream(); 

      // Read all the text returned by the server 
      BufferedReader in = new BufferedReader(new InputStreamReader(input)); 
      String inputLine; 

      //int x = 0; 
      while ((inputLine = in.readLine()) != null) 
      { 
       out.append(inputLine); 
      } 

      in.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return out.toString(); 
    } 

    public static String getURL(String p_URL, String p_userPass) { 
     StringBuffer out = new StringBuffer(); 

     try { 
      //get default report id 
      URL url = new URL(p_URL); 

      // Encode String 
      String encoding = new sun.misc.BASE64Encoder().encode (p_userPass.getBytes()); 

      HttpURLConnection huc = (HttpURLConnection) url.openConnection(); 
      HttpURLConnection.setFollowRedirects(false); 
      huc.setRequestProperty("Authorization", "Basic " + encoding); 
      huc.setConnectTimeout(30 * 1000); 
      huc.setReadTimeout(300 * 1000); 
      huc.setRequestMethod("GET"); 
      huc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)"); 
      huc.connect(); 

      InputStream input = huc.getInputStream(); 

      BufferedReader in = new BufferedReader(new InputStreamReader(input, "ISO-8859-1")); 
      String line; 
      while ((line = in.readLine()) != null) { 
       out.append(line); 
      } 
      in.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return out.toString(); 
    } 

    public static InputStream getURLStream(String p_URL, String p_userPass) { 
     InputStream out = null; 

     try { 
      //get default report id 
      URL url = new URL(p_URL); 

      // Encode String 
      String encoding = new sun.misc.BASE64Encoder().encode (p_userPass.getBytes()); 

      HttpURLConnection huc = (HttpURLConnection) url.openConnection(); 
      HttpURLConnection.setFollowRedirects(false); 
      huc.setRequestProperty("Authorization", "Basic " + encoding); 
      huc.setConnectTimeout(30 * 1000); 
      huc.setReadTimeout(300 * 1000); 
      huc.setRequestMethod("GET"); 
      huc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)"); 
      huc.connect(); 

      out = huc.getInputStream(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return out; 
    } 

    public static InputStream getURLStream(String p_URL) { 
     InputStream out = null; 

     try { 
      //get default report id 
      URL url = new URL(p_URL); 

      HttpURLConnection huc = (HttpURLConnection) url.openConnection(); 
      HttpURLConnection.setFollowRedirects(false); 
      huc.setConnectTimeout(30 * 1000); 
      huc.setReadTimeout(300 * 1000); 
      huc.setRequestMethod("GET"); 
      huc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)"); 
      huc.connect(); 

      out = huc.getInputStream(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return out; 
    } 
}