需要帮助奇怪的java.net.HttpURLConnection行为

时间:2009-11-23 22:46:36

标签: java httpurlconnection

我正在尝试使用HttpURLConnection下载jpg并遇到一个非常特殊的错误。

这是网址: http://www.vh1.com/sitewide/promoimages/shows/m/my_antonio/video/supertrailer/seg_1/320x240.jpg

如果您在浏览器中打开它,您将看到图像。

然而,当我使用HttpURLConnection时,我没有得到图像...... 我得到的是一个301,奇怪的是,它重定向到http://wap.vh1.com

所以

    con.setInstanceFollowRedirects(true);
//additional stream code here to go and get the stuff found in con

继续从wap.vh1.com下载文本,而不是您在浏览器中看到的jpg。

我猜测有一些标题怪异导致这种情况,但我并不是最不知道主机期望看到什么,以便将我重定向到重定向浏览器的位置(和卷曲)和wget以及我能想到的其他一切事项。)

我只是准备自己开枪了,所以,如果你帮助我,你将会阻止我6岁的女儿无父亲。

5 个答案:

答案 0 :(得分:4)

网站根据用户代理重定向您。在打开连接之前添加它,

conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.15) Gecko/2009101600 Firefox/3.0.15");

答案 1 :(得分:1)

服务器似乎将您的请求解释为来自移动设备,可能基于User-Agent标头。这就是您重定向到移动网站的原因。尝试明确设置User-Agent。

答案 2 :(得分:0)

虽然我无法帮助您解决具体问题,但我会这样做:

  • 下载wireshark,嗅探您的java应用程序发送的HTTP请求

  • 复制/粘贴请求,并使用telnet(或WFetch等工具)运行

  • 摆弄请求标头,查看行为是否发生变化。

(我怀疑该网站会根据用户代理标题或类似内容筛选请求)

答案 3 :(得分:0)

为了获得更大的灵活性,您可以使用http commons libraries,它通过log4j为 wire 提供了很好的调试支持...

此外,可以轻松设置用户代理和更多请求参数。

有关详细信息,请参阅their tutorial

答案 4 :(得分:0)

java.net包不支持开箱即用的许多功能(如自动保存和发送cookie)。使用Apache的httpClient而不是