Httpclient 4,错误302。如何重定向?

我要访问一个首先需要(tomcat服务器)身份验证的站点,然后使用POST请求登录,并保留该用户以查看站点的页面。我使用Httpclient 4.0.1

第一次身份验证可以正常运行,但登录时始终不会抱怨此错误:“ 302临时移动”

我保留cookie并保留上下文,但是什么也没有。实际上,登录似乎可行,因为如果我输入了错误的参数或用户||密码,则会看到登录页面。所以我想自动重定向是行不通的。

按照我的代码(总是抛出IOException)302:

    DefaultHttpClient httpclient = new DefaultHttpClient();

CookieStore cookieStore = new BasicCookieStore();

httpclient.getParams().setParameter(

ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);

HttpContext context = new BasicHttpContext();

context.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

//ResponseHandler<String> responseHandler = new BasicResponseHandler();

Credentials testsystemCreds = new UsernamePasswordCredentials(TESTSYSTEM_USER, TESTSYSTEM_PASS);

httpclient.getCredentialsProvider().setCredentials(

new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),

testsystemCreds);

HttpPost postRequest = new HttpPost(cms + "/login");

List<NameValuePair> formparams = new ArrayList<NameValuePair>();

formparams.add(new BasicNameValuePair("pUserId", user));

formparams.add(new BasicNameValuePair("pPassword", pass));

postRequest.setEntity(new UrlEncodedFormEntity(formparams, "UTF-8"));

HttpResponse response = httpclient.execute(postRequest, context);

System.out.println(response);

if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK)

throw new IOException(response.getStatusLine().toString());

HttpUriRequest currentReq = (HttpUriRequest) context.getAttribute(

ExecutionContext.HTTP_REQUEST);

HttpHost currentHost = (HttpHost) context.getAttribute(

ExecutionContext.HTTP_TARGET_HOST);

String currentUrl = currentHost.toURI() + currentReq.getURI();

System.out.println(currentUrl);

HttpEntity entity = response.getEntity();

if (entity != null) {

long len = entity.getContentLength();

if (len != -1 && len < 2048) {

System.out.println(EntityUtils.toString(entity));

} else {

// Stream content out

}

}

回答:

对于4.1版本:

DefaultHttpClient  httpclient = new DefaultHttpClient();

httpclient.setRedirectStrategy(new DefaultRedirectStrategy() {

public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context) {

boolean isRedirect=false;

try {

isRedirect = super.isRedirected(request, response, context);

} catch (ProtocolException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

if (!isRedirect) {

int responseCode = response.getStatusLine().getStatusCode();

if (responseCode == 301 || responseCode == 302) {

return true;

}

}

return isRedirect;

}

});

以上是 Httpclient 4,错误302。如何重定向? 的全部内容, 来源链接: utcz.com/qa/402683.html

回到顶部