0

我正在使用 Apache 的 HttpClient 类将数据发布到网站表单。使用以下代码行检索表单:

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

我从中检索表单的网站需要身份验证才能访问表单。如果请求未通过身份验证,则网站会将请求重定向到登录表单页面,该页面随后将在成功验证后重定向回原始页面。

我想干净地检测 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 回答