2010-01-15 7 views
2

J'essaie de me connecter et de récupérer des informations d'état à partir d'une URL HTTPS via la programmation Java. Je me connecte via /login.cgi, en fournissant le nom d'utilisateur et le mot de passe avec une requête POST à ​​ce script.Authentification HTTPS et cookies via Java

Le script vérifie ensuite les informations d'identification et crée un cookie spécifique (avec les informations de session, le nom d'utilisateur, etc.), puis appelle immédiatement un en-tête de réponse Location vers /home.cgi. Ce que, je suppose, le script /home.cgi vérifie les informations de cookie avant de continuer à charger. Sinon, il revient simplement à la page /login.cgi. Tout cela fonctionne très bien dans un navigateur à cause de la façon dont le navigateur gère correctement les cookies/sessions. Cependant, dans Java, c'est très compliqué car je ne peux pas obtenir le cookie approprié pour envoyer une requête aux pages suivantes. Je ne peux pas obtenir le cookie correct parce que je suis incapable de récupérer la réponse HTTP (qui contient la bonne valeur "Set-cookie") entre /login.cgi en créant le cookie spécifique et en appelant Location /home.cgi.

Y a-t-il quelque chose qui me manque ou y a-t-il une meilleure façon que Java puisse gérer les cookies similaires à un navigateur? (Est-il un magasin de biscuits, etc?)

Merci pour l'aide,

Steve

Répondre

4

Par défaut, la gestion des cookies n'est pas activée dans l'API HTTP java.net. Si vous ne avez pas besoin de la persistance des cookies de manipulation ou inter-applications spécifiques (les cookies seront supprimés lorsque votre application se termine), vous pouvez simplement activer avec

CookieHandler.setDefault(new CookieManager()); 
+0

Cette déclaration va donc automatiquement activer les cookies dans le programme Java similaire à celle d'un navigateur? –

+0

Oui, vous pouvez simplement l'appeler au début de votre méthode principale, et plus tard toutes les requêtes HTTP via java.net.URL utiliseront un cookie store similaire à la façon dont les navigateurs gèrent les cookies. – jarnbjo

+0

Oui, cela a fonctionné. Cependant, j'ai dû ajuster la politique des cookies pour accepter tous les cookies. CookieManager customCookieManager = nouveau CookieManager(); customCookieManager.setCookiePolicy (CookiePolicy.ACCEPT_ALL); CookieHandler.setDefault (customCookieManager); Merci pour l'aide. –

1

Comment faites-vous les connexions HTTP et la gestion des cookies?

Je recommande d'utiliser simplement commons-httpclient plutôt que de gérer vous-même. Il va automatically manage cookies pour vous.

+0

Quel avantage attendez-vous des Communes HTTPClient par rapport à la API standard intégrée? – jarnbjo

+0

Son API était beaucoup plus facile à utiliser que le standard, même si je ne suis pas familier avec les mises à jour récentes de java.net. –

Questions connexes