私はAndroidアプリでHttpClient
4.1を使用しています。自分のアプリのAPIリクエストを「ログインまたはWi-Fiの支払いが必要です」のいずれかで傍受していることを賢明にしています。wifiにログインする必要性を検出して処理する
ユーザーがログインできるようにwebviewをポップアップしたいと思います。
私はhttpClientのリダイレクトを傍受しようとしていましたが、失敗しました。私の活動の後、
this.client = new DefaultHttpClient(connectionManager, params);
((DefaultHttpClient) this.client).setRedirectStrategy(new DefaultRedirectStrategy() {
public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context) {
boolean isRedirect = Boolean.FALSE;
try {
isRedirect = super.isRedirected(request, response, context);
} catch (ProtocolException e) {
Log.e(TAG, "Failed to run isRedirected", e);
}
if (!isRedirect) {
int responseCode = response.getStatusLine().getStatusCode();
if (responseCode == 301 || responseCode == 302) {
throw new WifiLoginNeeded();
// The "real implementation" should return true here..
}
} else {
throw new WifiLoginNeeded();
}
return isRedirect;
}
});
とを::
この
は、私は現在しようとしているものですUri uri = Uri.parse("http://our-site.com/wifi-login");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
思考:ショーの無線LAN画面がこれを行う
try {
response = httpClient.get(url);
} catch (WifiLoginNeeded e){
showWifiLoginScreen();
}
これはです:
- 私のAPIは、それが活動のコードで例外とWebViewのポップは彼らが彼ら一度ログイン画面
- に向け得るために
- キャッチをリダイレクトだときに、私は私の特別なのRuntimeExceptionをスローするように設定するのHttpClient合法
- をリダイレクトすることはありませんログイン、WIFI-ログインが良い仕事上でそれらを祝福し、事は、私はそのWifiLoginNeeded例外を取得することはありません、バックアプリ
にそれらを要求します。 Androidでこれを達成するための好ましい方法は何ですか?
まず、httpサーバが正しいhttpReponse(301または302)を返すことを確認します。 – yorkw
問題は、私のサーバーがリダイレクトをしていないことです。それは、「高価なWiFiにログインする」ページにすべてを示すWiFiアクセスポイントの1つです。だから私は、リダイレクトされたHTTPコールについて考えることができるすべてのケースをキャッチする必要があります。 –
あなたが期待するリダイレクトのタイプではないかもしれません - あなたが期待するコードが生成されていることを確認してください。アクセスポイントはあなたが期待している特定のHTTPコードを返す必要はなく、[200]を送信してアクセスポイントのログイン画面にあなたを導いてくれても問題ないことを示すことができます。 サイトのIPアドレスを保存し、最新のhttp要求によって返されたIPアドレスと比較することができます。それらが異なる場合は、ログイン画面を呼び出します。 – RightHandedMonkey