2009-04-09 74 views
0

我试图从url下载图片。 我写的过程适用于除我们正在处理的一个内容提供者之外的所有人。java.net.URL和java.net.URLConnection的奇怪问题

当我通过Firefox访问他们的JPG格式时,一切看起来都是犹太教(快乐的逾越节,顺便说一句)。然而,当我用我的过程中,我可以:

A)获得404 或

B)在调试时,我设定在URL线路断路点(网址URL =新的URL(STR); ) 然后在连接之后,我得到一个文件,但它不是一个.jpg,而是他们用通用链接和东西生成的一些HTML。虽然我没有看到重定向代码!这回来为200

这里是我的代码...

URL url = new URL(urlString);    
URLConnection uc = url.openConnection();   
String val = uc.getHeaderField(0); 
System.out.println("FOUND OBJECT OF TYPE:" + contType); 
if(!val.contains("200")){       
    //problem 
} 
else{ 
    is = uc.getInputStream(); 
} 

有没有人见过这种性质的东西吗?我想也许这是一些MIME类型的问题,但这只是一个总猜测......我完全被难住了。

回答

3
if(!val.contains("200")) // ... 

首先,我建议你使用这款名为 HttpURLConnection的有用的,它提供了方法getResponseCode()

搜索整个数据对于一些“200”意味着

  1. 性能问题和
  2. 不一致性(二进制文件可以包含一些“200”)
3

您是否尝试过使用WireShark来准确了解数据包来回传送?这通常是查看不同内容的最快方法。那就是:

  1. 首先运行Wireshark的使用Firefox时,得到的GIF,然后
  2. 运行Wireshark来使用你的代码得到它。

然后比较和对比两个方向上的数据包,我几乎可以保证你会看到HTTP标头或流量的其他部分会解释问题的不同之处。

4

也许该网站只是使用某种保护措施,以防止他人盗链他们的图像或禁止大规模下载。

他们通常会检查HTTP referrer(它必须来自它们自己的域)或用户代理(必须是浏览器,而不是下载管理器)。同时设置并再次尝试。

0

所有优秀的猜测,但“正确”答案的奖励,我认为,必须去ivan_pertrovich_ivanovich_harkovich_rostropovitch_o'neil因为使用HttpURLConnection的我能看到的是,实际上,在获得404之前,我首先得到了301.所以,现在,这只是从这些人那里得到他们期望的标题,这会让他们不太愿意重定向我。

感谢您的建议。

+0

嗯,你猜对了,我的真名是不是伊万诺维奇Ivanoff, 但你应该知道,真的有谁被命名为这样的人;) (虽然我的第一个名字是真的伊万)... 在俄罗斯的中间名是父语 (http://en.wikipedia.org/wiki/Patronymic) – 2009-04-10 20:49:08