【发布时间】:2011-04-25 00:46:04
【问题描述】:
我正在尝试获取以下页面的源代码:http://www.amazon.com/gp/offer-listing/082470732X/ref=dp_olp_0?ie=UTF8&redirect=true&condition=all (请注意,如果您单击链接,亚马逊会将您带到另一个页面。要访问我有兴趣阅读的页面,请复制链接并将其粘贴到浏览器的空白选项卡中。谢谢!)
通常使用 java.net API,我可以毫无问题地获取大多数 URL 的源代码,但是对于上面的链接,我什么也得不到。原来连接生成的输入流是gzip编码的,于是我尝试了如下:
URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStream is = urlConnection.getInputStream();
HttpURLConnection.setFollowRedirects(true);
urlConnection.setRequestProperty("Accept-Encoding", "gzip, deflate");
String encoding = urlConnection.getContentEncoding();
if (encoding != null && encoding.equalsIgnoreCase("gzip")) {
is = new GZIPInputStream(is);
} else if (encoding != null && encoding.equalsIgnoreCase("deflate")) {
is = new InflaterInputStream((is), new Inflater(true));
}
但是这次我确定性地收到以下错误:
java.io.EOFException
at java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:249)
at java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:239)
at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:142)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:58)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:67)
at domain.logic.ItemScraper.loadURL(ItemScraper.java:405)
at domain.logic.ItemScraper.main(ItemScraper.java:510)
谁能看到我的错误?还有其他方法可以阅读此特定页面吗?有人能解释一下为什么我的浏览器(firefox)可以读取它,但是我无法使用 Java 读取源代码吗?
提前致谢,致以最诚挚的问候,
【问题讨论】:
-
我可以使用 Firefox 中的 VIEW GENERATED SOURCE 和 WebDeveloper 插件来查看它。老实说,用 Java 做这件事似乎很愚蠢
-
is设置在哪里? .. 传入 GZIPInputStream 的那个 -
请在您创建
is的位置发布。 -
对不起,已经是这样了:is = urlConnection.getInputStream();