класс для чтения http-страниц с надежным тайм-аутом, который возвращает `java.io.InputStream` - PullRequest
1 голос
/ 09 января 2012

Существует ли какой-либо класс для чтения http-страниц, который возвращает java.io.InputStream, и время его ожидания будет надежным?
Я попытался java.net.URLConnection, и у него нет надежного тайм-аута (требуется больше времени, чтобы установить тайм-аутдостичь)?Мой код здесь:

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

Ответы [ 2 ]

2 голосов
/ 09 января 2012

Я ожидаю, что причина того, что тайм-аут не работает для вас, заключается в том, что вы устанавливаете тайм-аут после установления соединения, или вы используете неправильный установщик.Также возможно, что вы используете «нестандартную» версию URLConnection ...

"Некоторые нестандартные реализации этого метода игнорируют указанное время ожидания. Чтобы увидеть время ожидания чтенияустановите, пожалуйста, позвоните getReadTimeout(). " (или getConnectTimeout())

Если вы разместите соответствующую часть вашего фактического кода, мы могли бы дать вам лучший ответ ...


Либо используйте библиотеку Apache HttpClient.

1 голос
/ 09 января 2012

Вы можете использовать Apache HttpClient для чтения страниц http, он также имеет http parser.check это для дальнейшей ссылки о httpclient . вы можете получить объект InputStream, используя их API, как это.

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.

...