Java 根据HttpGet使用Apache返回的内容发布到表单';https客户端

Java 根据HttpGet使用Apache返回的内容发布到表单';https客户端,java,forms,apache,post,httpclient,Java,Forms,Apache,Post,Httpclient,我正在使用Apache的HttpClient类将数据发布到网站表单中。使用以下代码行检索表单: HttpGet get = new HttpGet(url); HttpResponse response = client.execute(get); 我从中检索表单的网站需要身份验证才能访问表单。如果请求未通过身份验证,则网站会将请求重定向到登录表单页面,该页面将在成功进行身份验证后重定向回原始页面 我想清楚地检测GET请求是否返回登录页面或所需的表单页面,以便发布登录数据或表单数据。我能想到的

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

HttpGet get = new HttpGet(url);
HttpResponse response = client.execute(get);
我从中检索表单的网站需要身份验证才能访问表单。如果请求未通过身份验证,则网站会将请求重定向到登录表单页面,该页面将在成功进行身份验证后重定向回原始页面

我想清楚地检测GET请求是否返回登录页面或所需的表单页面,以便发布登录数据或表单数据。我能想到的唯一方法是读取响应实体的内容InputStream并解析每一行。但这似乎有点复杂。我以前没有使用过ApacheHttpComponents 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的意图是否过于抽象。

您可以通过设置HttpClient参数来修改HttpClient的行为

DefaultHttpClient client = new DefaultHttpClient();
client.setDefaultHttpParams(client.getParams().setBoolean(ClientPNames.HANDLE_REDIRECTS, false));
这将禁用自动处理重定向

另见:


禁用自动重定向的优势是什么?我想我是想看看是否有一种面向对象的方法来处理Apache的HttpClient的表单。我将编辑第一篇文章以包含一个示例。如果您对未经授权的请求禁用自动重定向,您将得到一个带有
HTTP状态码30x
的响应,并且目标位置位于
位置
标题中。根据响应的Http状态代码,您可以发送登录信息或其他信息,而无需解析HTML内容。更“面向对象”的方法是实现一个自己的。Strategie会做一些类似于我上面描述的事情。