根据HttpGet使用Apache的HttpClient返回的内容发布到表单

时间:2012-04-16 20:11:15

标签: java forms apache post httpclient

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

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

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

我想干净地检测GET请求是否返回登录页面或所需的表单页面,以便我可以POST登录数据或表单数据。我能想到的唯一方法是从响应实体的内容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的意图是否过于抽象。

1 个答案:

答案 0 :(得分:0)

您可以通过设置HttpClient参数

来修改HttpClient的行为
DefaultHttpClient client = new DefaultHttpClient();
client.setDefaultHttpParams(client.getParams().setBoolean(ClientPNames.HANDLE_REDIRECTS, false));

禁用自动处理重定向。

另见: