0

Apache の HttpClient クラスを使用して、Web サイトのフォームにデータを投稿しています。フォームは、次のコード行を使用して取得されます。

HttpGet get = new HttpGet(url);
HttpResponse response = client.execute(get);

フォームを取得している Web サイトでは、フォームにアクセスするために認証が必要です。リクエストが認証されない場合、Web サイトはリクエストをログイン フォーム ページにリダイレクトし、認証が成功すると元のページにリダイレクトされます。

ログインデータまたはフォームデータを POST できるように、GET リクエストがログインページまたは目的のフォームページを返すかどうかを明確に検出したいと考えています。これを行うために私が考えることができる唯一の方法は、応答のエンティティのコンテンツ InputStream から読み取り、各行を解析することです。しかし、それはやや複雑なようです。私は以前に Apache HttpComponents API を使用したことがないので、これが私が達成したいことを達成するための唯一かつ最良の方法であるかどうかはわかりません。

編集: 質問を明確にするために、Apache の HttpClient でフォームを処理する方法が設定されているかどうかを尋ねています。私は自分がやろうとしていることを達成する方法をある程度知っていますが、それは非常に醜く見えます.それを達成するためのより簡単で速い方法があることを願っています. たとえば、次のことを行う方法があったとします。

HttpGet get = new HttpGet(url);
HttpResponse response = client.execute(get);
if(parseElements(response.getEntity()).hasFormWithId("login")) {
    // post authentication data    
} else {
    // post actual form data
}

私は Apache の HttpClient API に慣れていないため、API で探しているものが API の意図に対して抽象的すぎるかどうかはわかりません。

4

1 に答える 1

0

HttpClient パラメータを設定することで、HttpClient の動作を変更できます。

DefaultHttpClient client = new DefaultHttpClient();
client.setDefaultHttpParams(client.getParams().setBoolean(ClientPNames.HANDLE_REDIRECTS, false));

これにより、リダイレクトの処理が自動的に無効になります。

以下も参照してください。

于 2012-04-16T20:55:32.210 に答える