有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java HTTP客户端请求设置超时

我想设置请求的超时时间。这是代码,到目前为止我已经知道了

final HttpClient httpclient = HttpClients.createDefault();
final HttpPost httppost = new HttpPost(address);
httppost.setHeader("Accept", "text/xml");
httppost.setHeader("Content-type", "application/xml; charset=UTF-8");
httppost.setEntity(new StringEntity(body));
final HttpResponse response = httpclient.execute(httppost);
final HttpEntity entity = response.getEntity();

我尝试过(不起作用,持续加载,忽略超时)

// set the connection timeout value to 30 seconds (30000 milliseconds)
final HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 30000);
client = new DefaultHttpClient(httpParams);

(这一个抛出^{

httpclient = HttpClients.createDefault();
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 3000);
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 6000);

有没有其他方法来设定时间?我真的不需要响应,所以像异步请求这样的东西也可以完成这项工作


共 (1) 个答案

  1. # 1 楼答案

    Apache的HttpClient有两个独立的超时:一个是等待多长时间建立TCP连接的超时,另一个是等待后续数据字节的超时

    ^{}用于建立TCP连接,而^{}用于等待后续字节的数据

    // Creating default HttpClient
    HttpClient httpClient = new DefaultHttpClient();
    final HttpParams httpParams = httpClient.getParams();
    
    // Setting timeouts
    HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
    HttpConnectionParams.setSoTimeout(httpParams, 30000);
    
    // Rest of your code
    final HttpPost httppost = new HttpPost(address);
    httppost.setHeader("Accept", "text/xml");
    httppost.setHeader("Content-type", "application/xml; charset=UTF-8");
    httppost.setEntity(new StringEntity(body));
    final HttpResponse response = httpclient.execute(httppost);
    final HttpEntity entity = response.getEntity();