我使用 BoilerPipe for Java 从互联网上提取一些文章。它适用于很多站点,但在几个站点中,当我不需要在我的网络浏览器中进行任何身份验证时,我得到一个 Http 401 服务器错误......
这是返回 401 错误的站点示例:http: //www.nature.com/nchem/journal/v7/n4/full/nchem.2206.html
我用这个来调用 ArticleExtractor:
URL url = new URL("http://www.nature.com/nchem/journal/v7/n4/full/nchem.2206.html");
String article = ArticleExtractor.INSTANCE.getText(url);
这是错误:
de.l3s.boilerpipe.BoilerpipeProcessingException: java.io.IOException: Server returned HTTP response code: 401 for URL: http://www.nature.com/nchem/journal/v7/n4/full/nchem.2206.html
通过探索堆栈跟踪,我发现问题发生在连接建立后(在 BoilerPipe 类中):
final URLConnection conn = url.openConnection();
final String ct = conn.getContentType(); // The Exception is thrown here !
我在其他网站上也遇到了 403 错误,同时能够在我的网络浏览器上观看文章。如何避免这个问题?
谢谢 !
编辑-更新:我设法通过在打开连接后添加以下行来解决 403 错误问题:
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");
但是我仍然没有解决401问题。我继续我的网络浏览器在标题中搜索信息,我发现即使浏览器出现 401 错误,但仍然可以获取信息。我做了一个打印屏幕:图片 http://img11.hostingpics.net/pics/757747error401.png
现在我什至不知道是否可以通过使用在我的网络浏览器上运行的 url 来获取文本......如果有人可以帮助我,那就太好了!:)
编辑 - 更新 2:我探索了网络并找到了几个返回 200 的链接(基本上与第一个链接相比有一些更改,但有很多 GET 参数)但它仍然返回 401 错误,所以我不知道该使用什么. 还有一些 302/303 重定向,没有更多结果。
编辑-更新3:也许改写它会使事情更清楚:有没有一种方法可以让我URLConnection
像网络浏览器一样遵循请求的“路径”?