Microsoft Exchange Server Web アクセス ポータルとの接続を開始しようとしています。アイデアは、私のプログラムが最初に Web ビューを開き、BroadcastReceiver を使用してページを継続的に更新することです。通常、exchange の Web ベースの電子メール アクセスはプロトコルを介して実行できることは承知していますが、とにかくこれを試しています。更新のタイミングは正常に機能しますが、問題は、WebView で接続を開いているにもかかわらず、HttpClient で更新を行っていることです。ログイン後、WebView から HttpClient に Cookie を渡し、SSL の接続を開いていますが、Web サーバーがキックバックしています。これはブラウザでうまく動作するので、ちょっと迷っています。
編集: OK、これはより基本的な HTTP リクエストの質問です。httpGet を処理するすべてのコードは、コンストラクターでセットアップされます。新しい HttpClient も作成しません。さて、これはBroadcastReceiverであり、60秒ごとに時間指定されたメッセージに応答してリクエストを行いますが、コードが終了するたびにスレッドが死んでいるように見え、タイマーがオフになるたびに空のコンストラクターが呼び出されます. このような http GET リクエストをコーディングする場合、毎回 HttpClient を再作成する必要がありますか? または、値を保持する静的変数を使用するのは正しい方法ですか? URL と Cookie は、1 回の呼び出しから次の呼び出しまで存続します。他に何が欠けていますか?このことへの最初の呼び出しも機能していないようです。そのため、SSL を間違っていると思います。繰り返しますが、このサイトは Web ブラウザで問題なく動作するので、
これはコンストラクター コードです。
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
// RESTORE THE COOKIES!!!
cookieJar = new BasicCookieStore();
localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieJar);
cookie = extras.getString("cookies");
String[] cookieCutter = cookie.split(";");
for (int i=0; i < cookieCutter.length; i++)
{
String[] values = cookieCutter[i].split("=");
BasicClientCookie c = new BasicClientCookie(values[0], values[1]);
c.setDomain(MAIL_WEB_SERVER);
cookieJar.addCookie((Cookie)c);
}
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
// Create local HTTP context
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", socketFactory, 443));
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
ThreadSafeClientConnManager mgr = new ThreadSafeClientConnManager(params, registry);
httpClient = new DefaultHttpClient(mgr, params);
httpClient.setCookieStore(cookieJar);
// Set verifier
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
そして、これは更新コードです:
BasicCookieStore cookies = (BasicCookieStore)localContext.getAttribute(ClientContext.COOKIE_STORE);
HttpGet httpGet = new HttpGet(url);
HttpResponse response = httpClient.execute(httpGet, localContext);
それで、これは私をどこに置きますか?エラー コード: 500 内部サーバー エラーが表示されます。サーバーは、指定された URL (Uniform Resource Locator) を拒否しました。サーバー管理者に連絡してください。(12202)
Cookie を移動し、すべての証明書を受け入れています... SSL 接続を使用したブラウザー セッションと、httpGet 要求のために渡す必要があるログインが他にありますか?