3

私は現在、メディア プレーヤーを持っており、ソース パスからリダイレクト アドレスを取得しようとしています。メディア プレーヤーはリダイレクト処理をサポートしていないため、httpurlconnection などを作成して、リダイレクトされた URL パスを取得しようとしています。ただし、それが正しいかどうかはわかりません。どんな助けでも大歓迎です。ありがとう。

コード:

Log.d(TAG, "create url - test");
URL testUrl = new URL(path);
HttpURLConnection conn = (HttpURLConnection)testUrl.openConnection();

String test = conn.getURL().toString();
String test1 = conn.getHeaderField(2);
String test2 = conn.toString();
Log.d(TAG, "normal stuff test is: " + test);
Log.d(TAG, "header field test is: " + test1);
Log.d(TAG, "url to string is: " + test2);
4

1 に答える 1

0

以下のコードは、URL リダイレクトの 1 ホップに従います。GETではなくHTTP HEADリクエストを使用することで、大幅に少ない帯域幅を消費します。複数のホップを処理するためにこのメソッドを拡張するのはかなり簡単です。

public URI followRedirects(URI original) throws ClientProtocolException, IOException, URISyntaxException
{
    HttpHead headRequest = new HttpHead(original);

    HttpResponse response = client.execute(headRequest);
    final int statusCode = response.getStatusLine().getStatusCode();
    if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY ||
        statusCode == HttpStatus.SC_MOVED_TEMPORARILY)
    {
        String location = response.getHeaders("Location")[0].toString();
        String redirecturl = location.replace("Location: ", "");
        return new URI(redirecturl);
    }
    return original;
}

フィールドに格納されているHttpClientが既に設定されていることを前提としていますclient

この質問も参照してください。

于 2012-06-07T19:15:11.817 に答える