java.net.URL和java.net.URLConnection的奇怪问题

时间:2009-04-09 23:59:20

标签: java url

我正在尝试从网址下载图片。 我写的过程适用于所有人,除了我们正在处理的一个内容提供商。

当我通过Firefox访问他们的JPG时,一切看起来都是犹太人(快乐的逾越节,顺便说一句)。但是,当我使用我的流程时,我要么:

A)获得404 或

B)在我在URL行设置断点时调试器(URL url = new 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();
}

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

4 个答案:

答案 0 :(得分:4)

也许网站只是使用某种保护措施来阻止他人热链接他们的图片或禁止大量下载。

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

答案 1 :(得分:3)

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

  1. 使用FireFox获取GIF时首先运行WireShark,然后
  2. 运行WireShark以使用您的代码获取它。
  3. 然后比较和对比两个方向的数据包,我几乎保证你会在HTTP标题或流量的其他部分看到不同的东西来解释问题。

答案 2 :(得分:3)

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

首先,我建议你使用这个有用的类来调用 HttpURLConnection ,提供方法 getResponseCode()

在整个数据中搜索某些“200”意味着

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

答案 3 :(得分:0)

所有好的猜测,但我认为,“正确的”答案奖励必须转到ivan_pertrovich_ivanovich_harkovich_rostropovitch_o'neil,因为使用HttpURLConnection我能够看到,事实上,在获得404之前,我首先得到了301那么,现在,只需要从这些人那里找到他们在标题中所期待的东西,这会使他们不太倾向于重定向我。

感谢您的建议。