0

数週間前に、通常のブラウザーのようにリダイレクトをたどらない WebView で問題が発生しました。多くのSO回答で与えられた次の提案を使用しました:

String newUrl = response.getFirstHeader("Location").getValue();

しかし、それはリダイレクトの1つのステップしか与えませんでしたが、それ以上ではありませんでした。リダイレクトを繰り返しリッスンし、各ステップを手動で実行することで、この問題を回避しました。

今、私は次のコードを使用しています:

HttpClient httpClient = MyApp.getHttpClient();
HttpPost httpPost = new HttpPost(con.getString(R.string.platform_url_getBalances));

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("sid", String.valueOf(sessionKey)));
ResponseHandler<String> responseHandler = new BasicResponseHandler();

httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

String response = null;

// Execute HTTP Post Request. Response body returned as a string
response = httpClient.execute(httpPost, responseHandler);

最近、 のエンドポイントがR.string.platform_url_getBalances変更されましたが、別の URL への 302 リダイレクトを追加しました。ブラウザと iPad バージョンのアプリでは問題なく動作しますが、Android ではorg.apache.http.client.HttpResponseException: Not Found.

リダイレクトに関しては、Android がこれほど苦労するのは非常に奇妙です。なぜこのように動作し、それを回避する合理的な方法はありますか?

4

1 に答える 1

0

実際、私のコメントでリンクした答えは、HttpClient 4.1 のもので、私が知る限り、Android の方が古いです。

私の推測では、Android のバージョンの HttpClient での同等のプロセスは次のようになります。

  • アプリに合わせDefaultRedirectHandlerてオーバーライドのサブクラスを作成しますisRedirectRequested()
  • のサブクラスを作成しDefaultHttpClient、オーバーライドcreateRedirectHandler()して、前の手順で作成したサブクラスのインスタンスを返します。
  • そのインスタンスを作成している場合はいつでも、サブクラスをそれ自体DefaultHttpClientの代わりとして使用してくださいDefaultHttpClient
于 2013-03-18T13:28:54.097 に答える