用于读取具有可靠的timout的http页面的类,该页面返回`java.io.InputStream`

时间:2012-01-09 10:56:41

标签: java http inputstream urlconnection

是否有任何类用于读取返回java.io.InputStream的http页面并且其超时是否可靠? 我尝试了java.net.URLConnection并且它没有可靠的超时(设置为超时范围需要更多时间)?我的代码在这里:

        URLConnection con = url.openConnection();
        con.setConnectTimeout(2000);
        con.setReadTimeout(2000);
        InputStream in = con.getInputStream();

2 个答案:

答案 0 :(得分:2)

我希望超时不起作用的原因是您在建立连接后设置了超时,或者您使用了错误的setter。您也可能使用URLConnection的“非标准”版本...

  

“此方法的某些非标准实现会忽略指定的超时。要查看读取超时设置,请致电getReadTimeout()。”(或getConnectTimeout()

如果你发布了实际代码的相关部分,我们可以给你一个更好的答案......


或者,使用Apache HttpClient库。

答案 1 :(得分:1)

您可以使用Apache HttpClient读取http页面,它还有一个http解析器。检查这个以进一步reference about httpclient。你可以像这样使用他们的API来获取一个InputStream对象。

HttpClient httpclient = new DefaultHttpClient();

 // Prepare a request object
 HttpGet httpget = new HttpGet("http://www.apache.org/");

 // Execute the request
 HttpResponse response = httpclient.execute(httpget);

 // Examine the response status
 System.out.println(response.getStatusLine());

 // Get hold of the response entity
 HttpEntity entity = response.getEntity();

 // If the response does not enclose an entity, there is no need
 // to worry about connection release
 if (entity != null) {
     InputStream instream = entity.getContent();

并且到了超时部分,它完全取决于网络,你不能从你的java代码做很多事情。