httpcliet超时重连设置

httpcliet有三种超时

ConnectionPoolTimeout: 从ConnectionManager管理的连接池中取出连接的超时时间。

ConnectionTimeout:  网络与服务器建立连接的超时时间。

SocketTimeout:    Socket读数据的超时时间,即从服务器获取响应数据需要等待的时间。


如果只是设置了ConnectionTimeout,如果不设置SocketTimeout,可能会导致一直在等待数据获取。如果连接超时的话,也可以设置超时重连


public static String getdata(String url, List<NameValuePair> params) {
  
		String tag = "";
		DefaultHttpClient  httpClient = new DefaultHttpClient();		
		httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 8000);//连接超时
		httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);//数据读取超时
		DefaultHttpRequestRetryHandler dhr = new DefaultHttpRequestRetryHandler(1, true);//设置超时重试次数为1
		httpClient.setHttpRequestRetryHandler(dhr);
		HttpPost post = new HttpPost(url);

		try {
			UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "utf-8");

			post.setEntity(entity);
			try {
				HttpResponse httpResponse = httpClient.execute(post);
				tag = "get string false";
				int connectstate = httpResponse.getStatusLine().getStatusCode();
				if (connectstate == 200) {
					HttpEntity entity2 = httpResponse.getEntity();
					tag = EntityUtils.toString(entity2);
				} else {
					System.out.println("connect state is: " + connectstate);
					return null;
				}
			} catch (ClientProtocolException e) {
				e.printStackTrace();
			} catch (SocketTimeoutException e) {
				return null;
			} catch (IOException e) {
				e.printStackTrace();
			}
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return tag;

	}


你可能感兴趣的:(httpcliet超时重连设置)