1

Apache HttpClient 4.x を使用して http get/head リクエストを送信しています。「 http://example.com/getAccessToken 」のような URL でリクエストを送信しています。応答は、返された URL に「 http://redirecturl.com/?code=accessTokenStuff 」のようなパラメーターを含むリダイレクト URL であると期待しています。応答リダイレクト URL パラメーターを解析できるようにしたい、つまり「accessTokenStuff」を取得したい。どうやってやるの?

HttpClient client = new DefaultHttpClient();
            HttpHead request = new HttpHead(authUrl);
            HttpResponse response = client.execute(request);
            System.out.println(response.getStatusLine().getStatusCode());//returns 200

            request.releaseConnection();

一言で言えば、私が欲しいのは、元のURLを実行してから、「コード」と呼ばれるパラメーターを持つ別のURLである結果を取得することです。次に、そのパラメーターの値を取得したいと思います。

編集:

私もこれを試しましたが、同じ元のURLを返します

DefaultHttpClient client = new DefaultHttpClient();
            HttpParams params = client.getParams();
            HttpClientParams.setRedirecting(params, false);
            HttpGet request = new HttpGet(authUrl);
            HttpResponse response = client.execute(request);
            String location = response.getLastHeader("Location").getValue();//returns same original url
            System.out.println(location);
            request.releaseConnection();

HttpClientParams.setRedirecting(params, true);リターンヌルの設定

4

1 に答える 1

0

HTTP 応答は「リダイレクト URL」の形式を取りません。リダイレクトと応答は、どちらも異なる (ただし関連する) 概念です。リダイレクトは通常、「元のアドレスではなく、このアドレスから応答を取得する」ことを意味します。

そうは言っても、HttpClient がリダイレクトをたどらないようにすることができます。この回答を参照してください: Apache http クライアントがリダイレクトをたどらないようにする方法

HttpClient がリダイレクトに従っていない場合は、応答の 'Location:' ヘッダーを調べることができます。

HeaderIterator iterator = httpResponse.headerIterator("Location");
while(iterator.hasNext()) {
  Header header = iterator.nextHeader();
  String redirectUrl = header.getValue();
}
于 2013-08-06T22:55:11.620 に答える