Je veux accéder à un site qui nécessite d'abord une authentification (serveur Tomcat), puis me connecter avec une requête POST et garder cet utilisateur pour voir les pages du site. J'utilise HttpClient 4.0.1Httpclient 4, erreur 302. Comment rediriger?
La première authentification fonctionne très bien, mais pas l'ouverture de session qui se plaint toujours de cette erreur: « 302 Déplacé temporairement »
Je garde les cookies & je garde un contexte et encore rien. En fait, il semble que la connexion fonctionne, car si j'écris des paramètres incorrects ou un mot de passe utilisateur ||, je vois la page de connexion. Donc je suppose que ce qui ne fonctionne pas est la redirection automatique.
Après mon code, qui jette toujours le 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 première authentification fonctionne très bien, mais pas l'ouverture de session qui se plaint toujours de cette erreur". Une redirection 302 n'est pas une plainte du serveur; c'est une indication que l'agent-utilisateur doit maintenant passer à la nouvelle page indiquée dans la réponse. –
Je pensais ça, mais comment? J'essaie alors une demande GET mais en vain. – juanmirocks