- PR -

『HttpClient』におけるCookieに関する質問

1
投稿者投稿内容
Maroon
会議室デビュー日: 2005/11/21
投稿数: 5
投稿日時: 2005-11-22 01:00
プログラム上から、(ログイン後にサーバから送信される)Cookieを利用することによって『Cookie認証が必要となるページ』にアクセスするプログラムを作成しています。
下記のサイト(※)を参考にプログラムを作成・実行したのですが、(Cookieは
きちんと送信されているにも関わらず)認証されません。

ここで質問です。

「下記のプログラムをどのように修正すれば、送信されているCookieが有効に働く(=認証される)のでしょうか?」

(他に原因があるかもしれませんが、一応、一時的にですが『認証後ページのHost』と
接続できているのでCookie認証の箇所が原因ではないかと…)

それではご回答の方、よろしくお願い致します。

◆java   :1.5.0_05
◆HttpClient:3.0-rc4

※『HttpClientでのCookieの扱い(HttpClient3.0-rc3) 』
http://www.h7.dion.ne.jp/~matsu/feature/uzumi/httpclient/cookie.html

『HttpClient 3.0-rc4 API』
http://jakarta.apache.org/commons/httpclient/apidocs/overview-summary.html


***[テストプログラム]**********************************************************



HttpClient client = new HttpClient();

String target = "ログインページで作成され、GET送信されるURL";

GetMethod gMethod = new GetMethod (target);

// Httpメソッドパラメータを設定.
gMethod.setRequestHeader("Connection", "keep-alive");

// Cookieポリシーの設定
gMethod.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
// CookiePolicy.BROWSER_COMPATIBILITY:主要なCookieマネージメントとの高い互換性を維持するモード.


try {
 // Httpメソッド実行
 int statusCode = client.executeMethod(gMethod);




***[キャプチャしたHTTPの一部]**************************************************

GET / HTTP/1.0
Connection: keep-alive
User-Agent: Jakarta Commons-HttpClient/3.0-rc4
Host: charge.quote.yahoo.co.jp ← 認証後ページのHost
Cookie: 〜
Cookie: 〜
Cookie: 〜
Cookie: 〜


このあとサーバからは、(認証されなかったことを表す)認証前のページの
Host(quote.yahoo.co.jp)のレスポンスが返されてしまいます。

*******************************************************************************
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-11-23 00:55
こんばんは。
引用:

Maroonさんの書き込み (2005-11-22 01:00) より:
プログラム上から、(ログイン後にサーバから送信される)Cookieを利用することによって『Cookie認証が必要となるページ』にアクセスするプログラムを作成しています。
下記のサイト(※)を参考にプログラムを作成・実行したのですが、(Cookieは
きちんと送信されているにも関わらず)認証されません。


HttpClientは使用したことがないので、詳細は分かりませんが、提示された
プログラムを見る限り、ログイン認証処理が行われていないように読み取れました。

ログイン後のページへアクセスする為には
1.ログインページのURLへ認証情報を含んだ形でリクエスト発行
2.レスポンスから認証クッキーを取得
3.アクセスしたいページへ2.で取得したクッキーをセットしてリクエスト発行
という流れを取る必要があるはずです。

この流に沿っているか確認してみてください。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-11-23 01:05
tcpmonなどを使って、実際のブラウザの送信するリクエストとの違いを比べてみてはいかがでしょうか。
http://ws.apache.org/axis/java/user-guide.html#AppendixUsingTheAxisTCPMonitorTcpmon
Maroon
会議室デビュー日: 2005/11/21
投稿数: 5
投稿日時: 2005-11-23 01:27
引用:

インギさんの書き込み (2005-11-23 01:05) より:
tcpmonなどを使って、実際のブラウザの送信するリクエストとの違いを比べてみてはいかがでしょうか。
http://ws.apache.org/axis/java/user-guide.html#AppendixUsingTheAxisTCPMonitorTcpmon



ご回答ありがとうございます。私はEthrealを使用しているのですが、特にtcpmonと大きな違いはないですよね? tcpmonの方に、より優れている点などがあるならばそちらを利用しますが…。

『Etherealを使おう』
http://www.space-peace.com/ethereal/ethereal.htm
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-11-23 01:41
Ethereal はTCPレベルのパケット主体で確認するツールですが、tcpmon はデータレベルで確認するツールです。
FIN / ACK といったパケットのフローを確認することは出来ませんがHTTPの要求・応答そのものを確認できますので読みやすいです。
パケットキャプチャではなくプロキシやリバースプロキシとして働くので localhost に対するリクエストものぞき見ることが出来るのが一番良いところだと思います。

パケットキャプチャツールとしては、Windowsをお使いであれば Packetyzer をお勧めします。
http://www.networkchemistry.com/products/packetyzer.php
こちらは Ethereal のラッパみたいなものですが、tcpmon みたいにデータレベルで確認することができます。
やはり localhost のやりとりはキャプチャできませんが。
1

スキルアップ/キャリアアップ(JOB@IT)