2

我正在尝试使用 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。

我猜是有一些标题古怪导致了这种情况,但我不知道主机期望看到什么以便将我重定向到与重定向浏览器相同的位置(以及 curl 和 wget 和我能想到的其他一切都指向它)。

我正准备开枪,所以,如果你帮助我,你将阻止我 6 岁的女儿失去父亲。

4

5 回答 5

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");
于 2009-11-23T22:54:21.897 回答
1

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

于 2009-11-23T23:04:05.433 回答
0

为了获得更大的灵活性,您可以利用http commons 库,它对通过 log4j的线路有很好的调试支持......

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

有关更多信息,请参阅他们的教程

于 2009-11-23T23:01:07.273 回答
0

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

于 2009-11-23T23:02:32.537 回答
0

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

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

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

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

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

于 2009-11-23T22:58:24.140 回答