有效 URL 的 java.io.FileNotFoundException

标签 java url rss ioexception rome

我使用库 rome.dev.java.net 来获取 RSS。

代码是

URL feedUrl = new URL("http://planet.rubyonrails.ru/xml/rss");
SyndFeedInput input = new SyndFeedInput();
SyndFeed feed = input.build(new XmlReader(feedUrl));

您可以检查 http://planet.rubyonrails.ru/xml/rss是有效的 URL,页面显示在浏览器中。

但是我的应用程序出现异常

java.io.FileNotFoundException: http://planet.rubyonrails.ru/xml/rss
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1311)
        at com.sun.syndication.io.XmlReader.<init>(XmlReader.java:237)
        at com.sun.syndication.io.XmlReader.<init>(XmlReader.java:213)
        at rssdaemonapp.ValidatorThread.run(ValidatorThread.java:32)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)

我不使用任何代理。我在我的 PC 和生产服务器上遇到此异常,并且仅针对此 URL,其他 URL 有效。

最佳答案

抛出该异常的代码看起来像这样......假设我有正确的版本:

if (respCode >= 400) {
    if (respCode == 404 || respCode == 410) {
        throw new FileNotFoundException(url.toString());
    } else {
        throw new java.io.IOException(
            "Server returned HTTP"
            + " response code: " + respCode
            + " for URL: " + url.toString());
    }
}

换句话说,当您从 Java 执行 GET 时,您将收到 404 或 410 响应。现在,当我使用 wget 实用程序发出请求时,我收到了 200 响应。所以我的猜测是问题是以下之一:

  • 当他们遇到一些配置问题时,您恰好提出了请求。
  • 他们已经实现他们的服务器以针对某些用户代理字符串返回 404/410。

其他可能性是他们正在对 IP 地址进行某种服务器端过滤,或者存在某些 DNS 问题导致您的请求转到不同的 IP 地址。但这两者似乎都与您可以在浏览器中访问提要这一事实相矛盾。

如果这是用户代理,请查看他们的服务条款,看看他们是否禁止某些类型的网站/RSS 提要的使用。

关于有效 URL 的 java.io.FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2794006/

相关文章:

html - 为什么 Twitter 和 Google API 文档不对 URL 中的 & 符号进行编码?

python - Django URL 在 root 和包含的 url 之间给我空间

使用 OpenJPA 的 Java Rss 阅读器,数据库中有许多条目 - 最佳实践

authentication - 如何验证 RSS 提要

java - Spring Security hasRole() 不起作用

从 SQL 数据库加载时的 Java 进度条

python - 当页面响应时间过长时,urllib 请求失败

java - 字节数组作为外部程序的标准输入/输出。

java - 如何在 javafx 中使用单选按钮组?

wordpress - WordPress 是否有 Feedburner 插件可以更改页面上的 RSS <link/> 标签