Quiero acceder a un sitio que primero requiere una autenticación (servidor Tomcat) y luego iniciar sesión con una solicitud POST y mantener a ese usuario para ver las páginas del sitio. Yo uso HttpClient 4.0.1Httpclient 4, error 302. ¿Cómo redirigir?
La primera autenticación funciona bien, pero no es el inicio de sesión que siempre se queja acerca de este error: "302 Movido temporalmente"
guardo las galletas & que mantienen un contexto y sin embargo nada. En realidad, parece que el inicio de sesión funciona, porque si escribo parámetros incorrectos o la contraseña del usuario, veo la página de inicio de sesión. Así que supongo que lo que no funciona es la redirección automática.
Siguiendo mi código, que siempre lanza el 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
}
}
"La primera autenticación funciona bien, pero no es el inicio de sesión que siempre se queja acerca de este error". Una redirección 302 no es una queja del servidor; es una indicación de que el usuario-agente debe proceder ahora a la nueva página indicada en la respuesta. –
Pensé eso, pero ¿cómo? Intento una solicitud GET pero fue en vano. – juanmirocks