0

这是我正在使用的代码

    URLConnection connection = null;
    InputStream inputStream = null;
    Scanner scanner = null;

    try {
        connection = new URL("http://www.aol.com").openConnection();
        inputStream = connection.getInputStream();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }

    scanner = new Scanner(inputStream);

    System.out.println(connection.getReadTimeout());

    while(scanner.hasNextLine())
    {
        System.out.println(scanner.nextLine());
    }

似乎超时设置为 0,但它总是死在同一个地方,具体取决于我执行此代码的位置。但是每个位置总是在同一个位置停止阅读。我运行了一个调试器,它死后,scanner.next() 没有返回。我知道这不是输入的一部分,因为此代码的不同位置在不同时间停止。我假设它与运行时间有关。

请帮忙 :-(

4

3 回答 3

0

我运行了您的(略微简化的)代码并取回了整个 HTML 页面。

final URLConnection connection = new URL("http://www.aol.com").openConnection();
System.out.println(connection.getReadTimeout());
final Scanner scanner = new Scanner(connection.getInputStream());
while(scanner.hasNextLine()) System.out.println(scanner.nextLine());
scanner.close();

输出:

0
<html
   ... many tons of html ...
</html>
于 2012-07-29T11:03:16.250 回答
0

您的代码在这里没有任何问题。您应该检查您的网络连接。您的代理可能非常不响应。尝试使用:

new URL("http://www.aol.com").openConnection(Proxy.NO_PROXY);  
于 2012-07-29T11:08:21.417 回答
-1

考虑直接从标准 Java SE 类访问 HTTP 数据是低级的。Apache HTTP 客户端库将处理许多细微差别 - 通常会在代码中显示出来,例如您的问题。如果您遇到配置问题,这实际上可能会透明地处理它们。试试看是否有帮助:

HttpClient client = new HttpClient();
client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
HttpMethod method = new GetMethod("http://www.aol.com");
method.setFollowRedirects(true);
client.executeMethod(method);
String responseBody = method.getResponseBodyAsString();
method.releaseConnection();

否则,其他解决方案可能会帮助您缩小配置的确切问题,因为您的代码看起来不错。

于 2012-07-29T11:08:44.857 回答