1

私はこれを理解できないようです。リダイレクトが 1 つしかない URL を読み込んでいますが、リダイレクトが 1 つしかないときに Android が「リダイレクトが多すぎます」とスローし、ブラウザで動作します。簡単なコード スニペットを次に示します。

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

1 に答える 1

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
}
于 2012-07-29T00:04:08.450 に答える