当前位置: 代码迷 >> java >> RSS Feed与浏览器中的显示完全不同
  详细解决方案

RSS Feed与浏览器中的显示完全不同

热度:88   发布时间:2023-08-02 10:38:28.0

因此,我尝试使用dom4j以编程方式解析Java播客中的RSS提要。

该代码是这样的,并且可以在大量的提要中顺利运行:

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));

String line;

while((line = reader.readLine()) != null)
{
    this.xmlData += line + "\n";
}
reader.close();

PrintWriter writer = new PrintWriter("rss_feed.txt", "UTF-8");
writer.println(this.xmlData);
writer.close();

this.document = DocumentHelper.parseText(this.xmlData);

然后我遇到了问题提要! 供稿的网址是: :

现在,很奇怪的是,如果我在浏览器中查看此页面,它看起来就像是普通的RSS feed,其中充满了预期的元素。

即使此提要验证器也确认它是正确格式的提要:

但是,如果我读了url并将其保存到文件中,它看起来就好像我在URL中看到的feed一样,并且包含了大量的javascript,根本没有任何普通的<item>元素,即使在JavaScript代码。

dom4j解析器讨厌我从url下载的提要,并且由于页面是.html页面而不是xml页面而抛出了一些时髦的异常。

我怀疑页面中的javascript是否以某种方式创建了我们在浏览器中看到的输出。 有什么方法可以下载我们在浏览器中看到的内容而不是原始javascript文件? 我想以一种可以自动化的方式来做到这一点,所以不要太过客气!

还是我完全把错误的树种了,还有其他事情吗?

编辑1:尝试接受HTTP标头中的XML

因此,正如评论者Julien Genestoux所建议的那样,我尝试使HttpURLConnection接受xml。 这是我尝试的代码:

HttpURLConnection connection = (HttpURLConnection)feed.openConnection();
connection.setRequestProperty("Accept","application/atom+xml,application/rdf+xml,application/rss+xml,application/xml,text/xml");
connection.connect();
String content_type = connection.getContentType();
System.out.println("content = " + content_type);

但是,当我运行此命令时,我将获得相同的数据,其内容如下:

text/html; charset=UTF-8

我编码正确吗? 我认为我有问题,因为此RSS feed确实可以正确验证,因此必须有可能从该URL获取xml格式的数据。

您遇到的是问题。 基本上,HTTP客户端可以要求服务器以特定格式获取内容(它本身使用Accept标头),并且服务器可以通过以请求的格式发送内容来遵守(或者只是忽略请求并以无论它想要什么)。

因此,您的问题不是“转换”您收到的内容,而是让HTTP库仅要求正确的格式。 为此,只需添加带有以下值的http标头Acceptapplication/atom+xml,application/rdf+xml,application/rss+xml,application/xml,text/xml ,您将收到的内容应为对。

另外,如果您想处理所有这些,请考虑使用像这样的API,它可以代表您执行轮询和解析,并仅向您发送标准化的JSON。