[解決済み] AndroidでCookieを使ったhttpリクエストはどうすればいいのですか?
2022-08-13 20:24:17
質問
クッキーを適切に扱いながら、リモートサーバーに http リクエストを行いたいと思います (たとえば、サーバーによって送信されたクッキーを保存し、その後のリクエスト時にそれらのクッキーを送信します)。 あらゆるクッキーを保存するのは良いことですが、実際に私が気にするのはセッション クッキーだけです。
java.netでは、これを行う好ましい方法はjava.net.CookieHandler (抽象ベースクラス)とjava.net.CookieManager (具象実装)を使うことであるようです。 Androidにはjava.net.CookieHandlerはありますが、java.net.CookieManagerはないようです。
http ヘッダーを検査することによって、すべて手作業でコーディングすることができましたが、もっと簡単な方法があるはずのようです。
AndroidでCookieを保持しながらhttpリクエストをする適切な方法は何ですか?
どのように解決するのですか?
Google Android には Apache HttpClient 4.0 が同梱されていることがわかり、その中で "Form based logon" の例を使ってどうすればよいのかがわかりました。 HttpClient ドキュメント :
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
/**
* A example that demonstrates how HttpClient APIs can be used to perform
* form-based logon.
*/
public class ClientFormLogin {
public static void main(String[] args) throws Exception {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("https://portal.sun.com/portal/dt");
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
System.out.println("Login form get: " + response.getStatusLine());
if (entity != null) {
entity.consumeContent();
}
System.out.println("Initial set of cookies:");
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println("None");
} else {
for (int i = 0; i < cookies.size(); i++) {
System.out.println("- " + cookies.get(i).toString());
}
}
HttpPost httpost = new HttpPost("https://portal.sun.com/amserver/UI/Login?" +
"org=self_registered_users&" +
"goto=/portal/dt&" +
"gotoOnFail=/portal/dt?error=true");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("IDToken1", "username"));
nvps.add(new BasicNameValuePair("IDToken2", "password"));
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
response = httpclient.execute(httpost);
entity = response.getEntity();
System.out.println("Login form get: " + response.getStatusLine());
if (entity != null) {
entity.consumeContent();
}
System.out.println("Post logon cookies:");
cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println("None");
} else {
for (int i = 0; i < cookies.size(); i++) {
System.out.println("- " + cookies.get(i).toString());
}
}
// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
}
関連
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
SLF4J: クラス・パスに複数のSLF4Jバインディングが含まれています。
-
1分でわかる!恋人の写真をIDEAの背景画像に設定する方法【おすすめ集
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] HTTP GET(リクエストボディ付き
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み】Axiosがリクエストに含まれるクッキーを自動的に送信するようにする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
executeQuery()でデータ操作文が発行できない。解決方法
-
BindException: アドレスはすでに使用中です:バインドエラー解決
-
java.sql.SQLException: 結果セットの開始前
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
Junitのユニットテストエラー
-
eclipse にリソースリーク:'in' が閉じない
-
Java Runtime Environmentを継続するためのメモリが不足しています。
-
Java:未解決コンパイル問題の解決方法
-
org.xml.sax.SAXParseExceptionのエラー解決方法