代码之家  ›  专栏  ›  技术社区  ›  Yevgeny Simkin

java.net.url和java.net.urlconnection存在奇怪的问题

  •  0
  • Yevgeny Simkin  · 技术社区  · 16 年前

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

    当我通过火狐访问他们的JPG时,一切看起来都很干净(快乐逾越节,btw)。但是,当我使用我的流程时,我可以:

    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 回复  |  直到 16 年前
        1
  •  3
  •   ivan_ivanovich_ivanoff    16 年前
    if(!val.contains("200")) // ...
    

    首先,我建议您使用这个名为 可设定代理 ,它提供了方法 获取响应代码()

    在整个数据中搜索大约“200”意味着

    1. 性能问题,以及
    2. 不一致(二进制文件 可以 包含一些'200')
        2
  •  4
  •   sleske    16 年前

    也许这个网站只是在使用某种保护来阻止其他人对他们的图片进行热链接或者禁止大量下载。

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

        3
  •  3
  •   Eddie    16 年前

    你试过用吗 WireShark 看看到底是什么包在来回移动?这往往是最快的方法来看看什么是不同的。即:

    1. 在使用firefox获取gif时,首先运行wireshark,然后
    2. 运行wireshark以使用您的代码来获取它。

    然后比较和对比两个方向的数据包,我几乎可以保证在HTTP报头或其他部分的通信中,您会看到一些不同的地方,这些地方可以解释这个问题。

        4
  •  0
  •   Yevgeny Simkin    16 年前

    所有的猜测都很好,但我认为“正确”的答案奖励必须是伊万·佩特罗维奇·伊万诺维奇·哈科维奇·罗斯特洛波维奇·奥尼尔,因为使用httpurlConnection,我能够看到,事实上,在获得404之前,我首先得到的是301。所以,现在,只需要从这些人那里了解他们在标题中的期望值,这将减少他们重定向我的倾向。

    谢谢你的建议。