有 Java 编程相关的问题?

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

java在通过HttpGet对象检索数据时设置超时值

我从以前的同事那里“继承”了一些Java代码。它的一部分使用GET方法连接到外部URL,并检索少量XML进行解析。由于供应商网站挂起并耗尽了我们这边的资源,我们的网站最近出现了连接崩溃的问题。一个问题是,当我们的代码使用HttpGet对象时,没有设置超时。有没有一种方法可以使用这个对象微调超时,或者有没有更好的方法可以收回这个XML

使用另一个API会更好吗

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("param1","foobar"));
URI uri = URIUtils.createURI("http", "myhost.com", -1, "mypath",
URLEncodedUtils.format(params, "UTF-8"), null);

// there is no timeout here??
HttpGet httpGet = new HttpGet(uri);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse httpResponse = httpClient.execute(httpGet);
String result = IOUtils.toString(httpResponse.getEntity()
    .getContent(), "UTF-8");

谢谢


共 (1) 个答案

  1. # 1 楼答案

    试试这个

    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("param1","foobar"));
    URI uri = URIUtils.createURI("http", "myhost.com", -1, "mypath",
    URLEncodedUtils.format(params, "UTF-8"), null);
    
    HttpGet httpGet = new HttpGet(uri);
    HttpClient httpClient = new DefaultHttpClient();
    // set the connection timeout value to 30 seconds (30000 milliseconds)
    final HttpParams httpParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParams, 30000);
    httpClient = new DefaultHttpClient(httpParams);
    HttpResponse httpResponse = httpClient.execute(httpGet);
    String result = IOUtils.toString(httpResponse.getEntity().getContent(), "UTF-8");
    

    Java HTTP Client Request with defined timeout