
下記のようなコードを書いて、自分が作成している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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Googleログインボタンのデザイ...
-
googleスプレッドシートのスク...
-
jdbcでinsert,delete,createをe...
-
プログラミングの問題です。大...
-
配列にnullを代入すると、null...
-
JDONWROADER2のエラー修復
-
スプレッドシートからリマイン...
-
googleスプレッドシートのGASに...
-
Verilogについて質問です。この...
-
論理回路設計をVerilogで行う問...
-
ゲーム開発の入門書を探しています
-
session,requestはjspで未定義...
-
サーブレットをapacheで公開す...
-
下記のリストならno002が含まれ...
-
is this even a thing?
-
JAの支部?地域の農協のカード...
-
えハミルトン路と全域木のちが...
-
CSV出力を画面から選択したデー...
-
ショートカットキーについて
-
list の空は [] ってあわらすのに
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クライアントのIPとマシン名を...
-
webサーバでクライアントを特定...
-
perlの環境変数 ENV{'REMOTE_A...
-
HttpClientを利用してのサービ...
-
URLConnection Timeoutエラー
-
携帯端末向け サーバサイドCook...
-
mod_rewriteの環境変数を埋め込...
-
社外からのアクセスかどうか判...
-
月の第一週とは
-
エクセルで毎月第2週日の水曜日...
-
エクセルで相対パスの書き方を...
-
毎○曜日って、使いますか?
-
週2回のペースって だいたい何...
-
VBA。複数のChangeイベントをま...
-
[Excel] ある日の曜日が当月の"...
-
よくある 『 第○(1・2・3・4・...
-
DBを10件毎に表示ページング...
-
アンケートなどの1日1回の投...
-
ユーザー定義の(aaa)
-
jcode.plが読み込めない
おすすめ情報