- PR -

HttpClientでリダイレクトしたいです

1
投稿者投稿内容
ゆいな
ベテラン
会議室デビュー日: 2006/01/19
投稿数: 89
投稿日時: 2007-12-20 16:42
お世話になります。

HttpClientを使って、WebサイトにユーザーIDとパスワードをPOSTして
そのレスポンスをクライアントに返却したいのですが
Webサイトからコンテンツが返却される場合(200 OK)はうまく動くのですが
Locationヘッダーで別のコンテンツにリダイレクトする場合(302)はうまく動きません。
※クライアントに真っ白の画面が表示されてしまいます。
認証後のCookie等はクライアントに返却されていますので
後はLocationヘッダーで指定されたURLへ飛ばせばやりたい事は完了します。

試行錯誤して汚いソースで申しわけないのですが
アドバイス等をいただければ助かります。よろしくお願いします。

-----------------

String spline;

client = new HttpClient();

PostMethod loginpostmethod = new PostMethod(loginurl);
loginpostmethod.addParameter(usernameparameter, username);
loginpostmethod.addParameter(passwordparameter, password);

if (parameter2 != null) {
for (int o = 0; o <= parameter2.length; o += 2)
if (parameter2[o] != null) {
if (parameter2[o + 1].equals("\"\"")) {
loginpostmethod.setParameter(parameter2[o],
"");
} else {
loginpostmethod.setParameter(parameter2[o],
parameter2[o + 1]);
}
} else {
break;
}
}

loginpostmethod.setDoAuthentication(true);

client.executeMethod(loginpostmethod);

BufferedReader loginreader = new BufferedReader(

new InputStreamReader(loginpostmethod.getResponseBodyAsStream(), "euc-jp"));

Header[] localheader = loginpostmethod.getResponseHeaders();

System.out.println("/--------ボディ戻り--------/\n");
while ((spline = loginreader.readLine()) != null) {
list.add(spline);
System.out.println(spline);
}

System.out.println("\n/--------ヘッター戻り--------/\n");
for (int j = 0; j < localheader.length; j++) {
if(localheader[j].getName().equals("Location")){
localheader[j].setValue(localheader[j].getValue().replace("://","%3A%2F%2"));
}
response.addHeader(localheader[j].getName(), localheader[j].getValue());
System.out.println(localheader[j]);
}
request.getSession().setAttribute( ActionConstants.PAR_PAGEROWS, list);

loginreader.close();
stream.close();
isr.close();
br.close();
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-12-21 00:40
公式なソースは見つかりませんでしたが、

[httpclient post redirect]でググったら、
http://www.google.co.jp/search?hl=ja&safe=off&rls=GGLJ%2CGGLJ%3A2006-40%2CGGLJ%3Aja&q=httpclient+post+redirect&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja
の一番目に、
http://slashdot.jp/~shimashima/journal/381083
がありまして、
引用:

POSTメソッドの場合、redirectには対応していない。また、GETメソッドの場合もHttpMethod#setFollowRedirect(true)としなければいけない。


と、試した結果が書かれていました。ApacheのHttpClientですよね?
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2007-12-21 13:23
ドキュメント読もう。
http://hc.apache.org/httpclient-3.x/redirects.html
1

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