Java实现Web版RSS阅读器(四)定制自己的Rss解析库myrsslib4j

在上篇博文《Web版RSS阅读器(三)——解析在线Rss订阅》中,已经提到了遇到的问题,这里再详细说一下。

在解析rss格式的订阅时,遇到的最主要的问题是,出现了“Server returned HTTP response code: 403 for URL: http://xxxxxx”的错误,百度一下就知道,这是在网站访问中很常见的一个错误,服务器理解客户的请求,但拒绝处理它。即拒绝访问!接着查资料,得知某些服务器(比如CSDN博客)拒绝java作为客户端进行对其的访问,所以在解析时,会抛异常。

不让访问怎么办,别怕,我们上有政策,下有对策。通过设置User-Agent来欺骗服务器,从而访问服务器。

connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");    //用UA伪装访问连接对象

但是折腾了半天,发现只有修改rsslib4j.jar才能给连接对象设置UA。只好找源码修改一下了,N久之后,在Google Code上猎取到一个开源的项目newrsslib4j,它是在rsslib4j的基础上修改而来的,项目开源主页:http://code.google.com/p/newrsslib4j/。满怀欣喜的下载下来,结果发现,依旧有403的问题。一狠心,自己来做一个rsslib,然后就checkout了newrsslib4j的源码,自己动手改动。

1. 修改403 forbidden问题。

修改org.gnu.stealthp.rsslib包中的RssParser类的setXmlResource()方法,给URLConnection对象,添加UA。

/**
 * Set rss resource by URL
 * @param ur the remote url
 * @throws RSSException
 */
public void setXmlResource(URL ur) throws RSSException{
  try{  

    URLConnection con = u.openConnection();  

    //-----------------------------
    //添加时间:2013-08-14 21:00:17
    //人员:@龙轩
    //博客:http://blog.csdn.net/xiaoxian8023
    //添加内容:由于服务器屏蔽java作为客户端访问rss,所以设置User-Agent
    con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
    //-----------------------------  

    con.setReadTimeout(10000);
 String charset = Charset.guess(ur);
 is = new InputSource (new UnicodeReader(con.getInputStream(),charset));
    if (con.getContentLength() == -1 && is == null){
      this.fixZeroLength();
    }
  }catch(IOException e){
    throw new RSSException("RSSParser::setXmlResource fails: "+e.getMessage());
  }
}

修改org.mozilla.intl.chardet包中的Charset类的guess()方法,注释掉原来的InputStream对象,创建URLConnection,设置User-Agent,通过URLConnection对象创建InputStream :

//judge from url
public static String guess(URL url) throws IOException {  

    //-----------------------------
    //修改时间:2013-08-14 21:00:17
    //人员:@龙轩
    //博客:http://blog.csdn.net/xiaoxian8023
    //修改内容:注释InputStream,创建URLConnection,设置User-Agent,通过URLConnection对象创建InputStream  

    //InputStream in = url.openStream();
    URLConnection con = url.openConnection();
    con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
    InputStream in = con.getInputStream();
    //-----------------------------  

    return guess(in);
}

更多精彩内容:http://www.bianceng.cn/Programming/Java/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索服务器
, 对象
, 解析url问题
, csdn博客
, inputstream
, urlconnection
, CON
User-agent
rsslib4j、rss阅读器、rss阅读器下载、rss阅读器哪个好、mac rss阅读器,以便于您获取更多的相关知识。

时间: 2024-10-25 00:24:39

Java实现Web版RSS阅读器(四)定制自己的Rss解析库myrsslib4j的相关文章

Java实现Web版RSS阅读器(五)初步完成阅读功能

上一篇博文<Web版RSS阅读器(四)--定制自己的Rss解析库myrsslib4j>中,已经分享给大家制作自己的rss解析库.稍微有点遗憾的是,它仅仅支持rss格式的博客.现在给大家分享一下我基于rome修改而成的另一款rss解析库--myrome,完美支持atom和rss 2种格式. myrome.jar是在rome的基础上修改而来的,主要改动的地方是:(查看详细修改说明) 修改GetAuthor()返回null 修改getPublishedDate()返回null 添加获取文章摘要的接口

Java实现Web版RSS阅读器(三)解析在线Rss订阅

上篇博客< Web版RSS阅读器(二)--使用dTree树形加载rss订阅分组列表>已经写到读取rss订阅列表了,今天就说一下,当获取一条在线rss订阅的信息,怎么去解析它,从而获取文章或资讯. 首先说一下rss的版本.很多人都说rss,但是有相当一部分人,都不知道rss居然不只一种格式.我们常用的订阅格式有Rss和Atom 2种格式.Rss有版本从v0.9一直到现在的v2.0,Atom最新的版本则是1.0. DeveloperWorks有一篇文章<使用 RSS 和 Atom 实现新闻联

用JSP实现基于Web的RSS阅读器

js|rss|web 一: RSS介绍 根据维基百科(http://zh.wikipedia.org/wiki/RSS)的定义,"RSS是一种用于共享新闻和其他Web内容的数据交换规范 ",它是一系列的规范的组合,采用XML格式.目前国内RSS应用最多的是在新闻网站和博客网站上. 许多网站可以用RSS阅读器来个性化自己的网页,比如显示最新的新浪新闻,显示自己好朋友最新的博客文章,显示最新的Google论坛内容.除此之外,利用RSS阅读器还可以实现其它用途,比如: 获得天气预报 接收邮件

基于JSP的RSS阅读器的设计与实现方法(推荐)_JSP编程

阅读器访问地址:http://easyrss.tk/,欢迎体验! 阅读导览 一. 概述 二. 设计的基本概念和原理 三. 设计方案 四. 主要源代码 五. 阅读器使用说明 概述 获得信息是在人类的生活中是必不可少的环节.如果现在的社会对获得信息不快捷,那么这个社会将不会像如今这般的发达和进步.在当今网络技术相当发达的今天,大量的信息充斥在网上.现在网络越来越发达,用户在网上既能工作也能娱乐.当用户在网上需浏览很多个网站才能获取自己多需的信息时,那就感觉很累.因为现在每个网站都有很多信息,找到自己

用开源工具创建BlackBerry应用程序,第2部分 构建RSS阅读器

开放源码对软件开发市场产生了革命性影响,如今新的消息渠道不断涌现, 它们正是以这种方式强劲地冲击着传统的消息渠道.今天我们可以从各种 Internet 资源和 Internet 主流媒体获得免费的消息.我们可以通过阅读不同 的 Web 站点来获取消息,但这样做非常繁琐.那么,随时更新感兴趣的消息怎 么样?集中地接收您喜欢的消息不是很方面吗?在 BlackBerry 上,您可以通过 RSS 阅读器来实现这些功能.本教程是系列教程 "用开源工具创建 BlackBerry 应用程序" 的第

博阅RSS阅读器快速入门

rss|快速入门 博阅RSS阅读器是为信息时代尽快获取所需信息而打造的一款简单易用的RSS阅读器.通过它您可以管理.获取.阅读 格式的信息.管理信息就是您可以根据自己的需要来确定和管理信息来源,获取信息就是您可以根据自己的需要从定制的信息源中来更新获取信息,阅读信息是指您可以方便的在阅读器中查看信息列表.摘要和详细内容.总之,您可以通过博阅RSS阅读器及时的获得你所要的各种信息. 软件资料 软件名称:博阅RSS阅读器 软件版本:V1.0 软件大小:20.26 MB 软件性质:免费软件 支持平台:

rss-关于移动端RSS阅读器的

问题描述 关于移动端RSS阅读器的 前不久刚听说RSS这两个字儿,颇感兴趣,在应用商店下载了gReader,但是不会用啊,求指教 解决方案 可惜你听说的都太晚了,Google Reader已经关门大吉了.而且关张都2年多了.http://tech.sina.com.cn/i/2013-06-30/09558493078.shtml 解决方案二: Android开发RSS阅读器

PHP和AJAX的RSS阅读器

PHP和AJAX的RSS阅读器 RSS阅读器是用来读取RSS信息 允许快速的RSS浏览新闻和更新 AJAX的RSS阅读器 在AJAX以下例子,我们将展示一个RSS阅读器的内容从RSS是载入网页无需刷新. 在HTML表单 这是HTML网页.它包含一个简单的HTML表格,并链接到一个JavaScript : <html> <head> <script type="text/javascript" src="getrss.js"><

Java实现Web版RSS阅读器(二)使用dTree树形加载rss订阅分组列表

在上一边博客<Web版RSS阅读器(一)--dom4j读取xml(opml)文件>中已经讲过如何读取rss订阅文件了.这次就把订阅的文件读取到页面上,使用树形结构进行加载显示. 不打算使用特殊的控件进行树型显示,也不想自己写了,想省劲些,就在 网上找了一个js树形脚本--dTree.dTree是一个易于使用的JavaScript树形 菜单控件.支持无限分级,可以在同一个页面中放置多个dTree,可以为每个 节点指定不同的图标. 主页:http://destroydrop.com/javascr