2015-04-24 44 views
0

如何设置HttpDefaultClient的暂停时间?如何设置HttpDefaultClient的超时期限?

对于下面的代码,我想设置一些时间,以便它不会挂起更多的时间。

String methodName = "getResponseFromGlobalService"; 
logger.info(methodName + " started " + "with" + restUrl + "inputs" + jsonObject.toString()); 
DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpPost postRequest = new HttpPost(restUrl); 
StringBuffer outputDocument = new StringBuffer(); 
StringEntity input1 = new StringEntity(jsonObject.toString()); 
input1.setContentType("application/json"); 
postRequest.setEntity(input1); 
HttpResponse response = httpClient.execute(postRequest); 

if (response.getStatusLine().getStatusCode() != 200) { 
    throw new RuntimeException("Failed : HTTP error code : " + response.getStatusLine().getStatusCode()); 
} 

BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent()))); 

String output; 
logger.info("Output from Server .... \n"); 
while ((output = br.readLine()) != null) { 
    outputDocument.append(output); 
} 

JSONObject json = (JSONObject) JSONSerializer.toJSON(outputDocument.toString()); 
logger.info(methodName + " ended "); 
return json; 
+0

重复http://stackoverflow.com/questions/3000214/java-http-client-request-with-defined-timeout – aksappy

+0

的请考虑upvoting或接受的答案,如果它帮助你解决了这个问题。否则,请提供信息。在什么不工作。谢谢! –

回答

0

如果使用DefaultHttpClient 3.X,那么这两种方法,你需要有HttpConnectionParams.html.setConnectionTimeout()HttpConnectionParams.html.setSoTimeout(),分别设置连接超时和插座超时。连接超时是等待连接建立的持续时间,而套接字超时是等待数据的持续时间。

所以,你会使用它们像这样:

HttpConnectionParams httpParams = new HttpConnectionParams(); 

int connectionTimeout = 30000; // some timeout in milliseconds 
httpParams.setConnectionTimeout(connectionTimeout); 

int socketTimeout = 30000; // some timeout in milliseconds 
httpParams.setSoTimeout(socketTimeout); 

DefaultHttpClient httpClient = new DefaultHttpClient(httpParams); 

现在,如果你使用的是DefaultHttpClient 4.x的,(在这种情况下,你应该使用HttpClientBuilder代替DefaultHttpClient),那么这些都是方法是将有关:

  1. RequestConfig.Builder.setConnectTimeout
  2. RequestConfig.Builder.setSocketTimeout
  3. RequestConfig.Builder.setConnectionTimeout

下面是一个例子。

int connectTimeout = 50000; 
int requestTimeout = 50000; 
int socketimeout = 50000; 
RequestConfig requestConfig = 
    RequestConfig.custom() 
     .setConnectTimeout(connectTimeout) 
     .setConnectionRequestTimeout(requestTimeout) 
     .setSocketTimeout(socketTimeout) 
     .build(); 
HttpClient httpClient = 
    HttpClientBuilder.create() 
     .setDefaultRequestConfig(requestConfig) 
     .build();