2012-07-28 17 views
0

我似乎无法弄清楚这一点。我正在加载一个包含单个重定向的网址,而Android只在一次重定向时抛出“太多重定向”,并且它在浏览器中运行。这里有一个简单的代码片段:Android的url.openstream给出了太多的重定向IOException

URL url = null; 
InputStream in; 
String pic_url = "http://www.cdn.sherdog.com/image_crop/200/300/_images/fighter/20100221121302_bader.JPG"; 
try { url = new URL(pic_url); } 
catch (MalformedURLException e1) { Log.d("iTrackMMA","URL had exception malformedURLEx on: " + pic_url); } 

try { in = url.openStream(); } 
catch (IOException ioe) { Log.d("iTrackMMA","URL had IOException on: " + pic_url + " with error: " + ioe.getMessage()); } 

错误:

07-28 21:57:38.017: URL had IOException on: http://www.cdn.sherdog.com/image_crop/200/300/_images/fighter/20100221121302_bader.JPG with error: Too many redirects 

如果我使用的URL,这重定向到,切出任何重定向,我仍然得到同样的错误,即使没有按”似乎是任何重定向?

URL url = null; 
InputStream in; 
String pic_url = "http://m.sherdog.com/image_crop.php?image=http://www.cdn.sherdog.com/_images/fighter/20100221121302_bader.JPG&&width=200&&height=300"; 
try { url = new URL(pic_url); } 
catch (MalformedURLException e1) { Log.d("iTrackMMA","URL had exception malformedURLEx on: " + pic_url); } 

try { in = url.openStream(); } 
catch (IOException ioe) { Log.d("iTrackMMA","URL had IOException on: " + pic_url + " with error: " + ioe.getMessage()); } 

错误:

07-28 21:48:31.337: URL had IOException on: http://m.sherdog.com/image_crop.php?image=http://www.cdn.sherdog.com/_images/fighter/20100221121302_bader.JPG&&width=200&&height=300 with error: Too many redirects 

我缺少什么?它是否也为其他人做这件事?我想知道是否有关于此URL的非HTML标准,如果是,我希望找到一种解决方法,以便Android可以很好地处理它。

感谢您的任何见解。

回答

4

由于服务器正在重定向,它显然有某种请求过滤运行 - 这可能是质量问题(更有可能不是)。

仅仅因为它在浏览器中工作并不意味着它会直接使用URL#openStream() - 您可能必须欺骗您实际上是普通Web浏览器的服务。

在你的情况下,尝试执行以下操作:

try { 
    URL url = new URL(pic_url); 
    URLConnection conn = url.openConnection(); 
    // Spoof the User-Agent of a known web browser 
    conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"); 
    in = conn.getInputStream(); 
} catch (MalformedURLException e) { 
    // Error handling goes here 
} catch (IOException e) { 
    // Error handling goes here 
} 
+0

啊,我应该知道。在我写的几乎所有其他刮板类型的项目中,我都必须这样做,我只是不认为这次尝试设置用户代理。我被重定向循环抛弃了。奇怪的是,它使用命令行中的“wget”,该网站必须接受其用户代理,但不是默认的Android代理。 – 2012-07-29 04:43:11

+0

奇怪的是,在S3 4.0.4上出现问题,但在Nexus-S 4.1.1上没有问题。刚刚测试过。 – kinghomer 2012-10-22 13:25:55