在Java中,为什么我的HttpURLConnection请求偶尔会抛出“UnknownHostException”?

时间:2014-11-17 03:19:49

标签: java apache http

在1小时的时间内,每10到15秒,我用Java执行:

        conn = (HttpURLConnection) url.openConnection(); 
        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
        BufferedReader bufrdr = new BufferedReader(new InputStreamReader(conn.getInputStream(), charDcdr));

我的目的是下载一堆网页,对它们进行标记,然后将它们存储在数据库中。我只是为了自己的学习而使用这些文件(没有任何恶意)。

它几乎总是有效,但我的连接请求时不时会抛出 UnknownHostException NoRouteToHostException 。我抓住异常,等待10分钟,然后继续下载。没问题。但是,我很好奇。

我从网络浏览器请求的网页总是拉出一页。从Java内部请求有时会失败。

  1. 网络服务器上是否有一些设置检测到我发出的请求太多(自动下载),以某种方式识别我的Java程序,并拒绝我的请求?然后,如果我等了几分钟,它会让我继续下载页面吗?
  2. 它是如何识别我的?
  3. 我认为上面的代码片段掩盖了我在Mac上运行的Firefox浏览器的请求(而不是Java机器人的请求)?
  4. 网站管理员不希望人们自动下载,对吗? (但是,在我的情况下,我尊重这一点,并在请求之间等待几秒钟或几分钟。而且,我只是为了自学而这样做。)

1 个答案:

答案 0 :(得分:0)

浏览器通常会在非常绝望的尝试中重试,以便为您提供内容。如果您自己在短时间内编写简单的重试代码,则可能会获得更可靠的结果。慢响应名称服务器可能会调用UnknownHostException。如果您查询大量不同的主机,那么该区域中的问题是预期的,并且重试也会有帮助。您可以在计算机上配置不同的名称服务器(解析程序)以获得更可靠的答案。