![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
下記のようなコードを書いて、自分が作成しているWebアプリ(A)から、別のサービス(B)にアクセスし、結果を取得しようとしています。
AとBは同じサーバ上にあり、ドメインも同じです。
private String hoge(HttpServletRequest req, HttpServletResponse res) {
Cookie[] cookies = req.getCookies();
CookieStore cookieStore = new BasicCookieStore();
if (cookies != null) {
for (Cookie c : cookies) {
BasicClientCookie cookie = new BasicClientCookie(c.getName(),
c.getValue());
cookie.setAttribute(ClientCookie.MAX_AGE_ATTR,
Integer.toString(c.getMaxAge()));
cookie.setComment(c.getComment());
cookie.setDomain(c.getDomain());
cookie.setPath(c.getPath());
cookie.setSecure(c.getSecure());
cookie.setVersion(c.getVersion());
cookieStore.addCookie(cookie);
}
}
List<Header> headerList = new ArrayList<Header>();
headerList.add(new BasicHeader("user-agent", req.getHeader("user-agent")));
String url = "https://xxxxx.com/hogehoge/"; //Bのサービス
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(1000).setSocketTimeout(1000).build();
CloseableHttpClient httpClient = HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig).setDefaultHeaders(headerList)
.setDefaultCookieStore(cookieStore).build();
HttpClientContext context = HttpClientContext.create();
HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response = null;
try {
response = httpClient.execute(httpGet, context);
int statusCode = response.getStatusLine().getStatusCode();
~省略~
} catch (IOException e) {
~省略~
} finally {
try {
if (response != null) {
response.close();
}
} catch (IOException e1) {
// ignore
}
try {
if (httpClient != null) {
httpClient.close();
}
} catch (IOException e) {
// ignore
}
}
}
BではAから送信されるCookieを利用して処理を行うのですが、上記のコードだとB側でCookieを取得することが出来ていません。(同じようにセットしたヘッダは送信できています)
Bへのリクエストヘッダにクライアントから取得したCookie情報を追加するには、他に必要な処理があるのでしょうか?
環境は下記の通りです。
Java:1.8
HttpClient:4.3.6
No.1ベストアンサー
- 回答日時:
実験したわけではないので、思いつきになりますが、回答しておきます。
AからBにアクセスするとき、Aに送られてきたCookieをコピーしてBに送っているようですが、その時、CookieのドメインとパスもAに対するもののままコピーしています。
ドメインが同じであるなら、パスだけでも、Bに対応したものに変更する必要があると思います。
HttpClientには詳しくないので、想像になりますが、CookieStore に設定されたCookieが全部そのまま送られるわけではなく、その中から、ドメインとパスが対応するものを選んで、アクセス先に送られるのだと思います。
ご回答ありがとうございます。
教えて頂いたことを参考に、ドメインとパスをBのサービス用に指定したところ、
無事にBのサービス側でCookieの値を受け取ることが出来ました!
本当にありがとうございます。
とても助かりました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP sessioncookieをではなくcookieを使わなければならない理由について… 4 2022/11/07 13:01
- Chrome(クローム) Cookieを削除 他サイトでの自動ログインなどの設定も削除されますか パソコン クロームです 1 2022/09/10 21:47
- PHP PHPで訪問回数を表示するカウンタを作成したい 3 2023/05/27 07:09
- Google Drive Google Earth PRO が 次のメツセージが出て開けません 2 2022/10/08 18:46
- Chrome(クローム) google earth PROをクリックすると下記の表示がされPROが開きません 2 2022/07/28 10:25
- その他(ソフトウェア) FierFox 99.0.1(64ビット) で 時々 Cookie情報が消えます 4 2022/05/03 05:42
- サーバー クッキーをサーバー側で管理することで攻撃に備える 1 2022/08/11 03:49
- その他(IT・Webサービス) サードパーティのプロファイリングCookieへの同意は大丈夫? 1 2023/08/09 09:51
- その他(ソフトウェア) ロイロノート(アプリ版)のログインができません。 2 2022/09/04 21:07
- その他(ブラウザ) 最近、いろいろなブラウザでログインができません。 2 2022/03/29 00:04
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クライアントのIPとマシン名を...
-
webサーバでクライアントを特定...
-
.htaccess の書き方について教...
-
携帯端末向け サーバサイドCook...
-
6月の第2 第4火曜日は何日...
-
月の第一週とは
-
DBを10件毎に表示ページング...
-
よくある 『 第○(1・2・3・4・...
-
エクセルで毎月第2週日の水曜日...
-
[Excel] ある日の曜日が当月の"...
-
apacheでPerl CGIが作動せず、5...
-
週2回のペースって だいたい何...
-
VBA。複数のChangeイベントをま...
-
ディレクトリパスの取得について
-
jcode.plが読み込めない
-
エクセルで相対パスの書き方を...
-
1日1回しかアクセスできないページ
-
土曜日の26時って何曜日の何時...
-
一年の第何週目であるかを判断...
-
曜日と曜の使い分けがわかりま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クライアントのIPとマシン名を...
-
HttpClientを利用してのサービ...
-
webサーバでクライアントを特定...
-
社外からのアクセスかどうか判...
-
BASE64でエンコードしてPOSTし...
-
携帯端末向け サーバサイドCook...
-
Perlでの$ENV{REMOTE_ADD}の信...
-
IPとホスト名の変換について
-
プロキシ経由でNet::FTPを利用...
-
Androidアプリで外部データベー...
-
mod_rewriteの環境変数を埋め込...
-
prologでの数式の簡単化
-
perlの環境変数 ENV{'REMOTE_A...
-
URLConnection Timeoutエラー
-
プロキシサーバ経由を拒否したい
-
月の第一週とは
-
よくある 『 第○(1・2・3・4・...
-
エクセルで毎月第2週日の水曜日...
-
6月の第2 第4火曜日は何日...
-
DBを10件毎に表示ページング...
おすすめ情報