繁体   English   中英

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

[英]strange problem with java.net.URL and java.net.URLConnection

我正在尝试从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();
}

有人看到过这种性质的东西吗? 我在想,也许这是一些哑剧类型的问题,但这只是一个总的猜测……我完全感到困惑。

也许网站只是在使用某种保护措施,以防止他人热链接其图像或禁止大量下载。

他们通常检查HTTP引荐来源网址(必须来自其自己的域)或用户代理(必须是浏览器,而不是下载管理器)。 设置两个并重试。

您是否尝试过使用WireShark来确切查看正在往返的数据包? 这通常是最快的方法来了解不同之处。 那是:

  1. 使用FireFox获取GIF时,首先运行WireShark,然后
  2. 运行WireShark以使用您的代码来获取它。

然后在两个方向上对数据包进行比较和对比,我几乎保证您会在HTTP标头或流量的其他部分看到不同的内容来解释问题。

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

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

在整个数据中搜索“ 200”表示

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

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

谢谢你的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM