2010-06-15 10 views
2

J'ai beaucoup de mal à me connecter à un site Java. J'utilise la requête POST URLconnection par défaut, mais je ne sais pas comment gérer correctement les cookies. J'ai essayé ce guide: http://www.hccp.org/java-net-cookie-how-to.html Mais ne pouvait pas le faire fonctionner. J'ai essayé essentiellement pendant des jours maintenant, et j'ai vraiment besoin d'aide si quelqu'un veut m'aider.Java: Gestion des cookies lors de la connexion avec POST

On me dira probablement que c'est compliqué et que je devrais utiliser une bibliothèque personnalisée pour ce genre de choses. J'ai essayé de télécharger un, mais je ne savais pas comment l'installer et travailler. J'essaye diverses choses depuis des heures maintenant, et ça ne marchera pas. Je préférerais le faire avec une connexion d'URL standard, mais si quelqu'un peut m'aider à faire fonctionner une autre bibliothèque, c'est bien aussi.

J'apprécierais vraiment que quelqu'un puisse poster une source de travail que je pourrais étudier. Ce dont j'ai besoin, c'est: POSTER les données de connexion au site -> Récupérer et stocker le cookie depuis le site -> utiliser le cookie avec les prochaines requêtes de connexion à l'URL pour obtenir la version du site.

Quelqu'un peut-il m'aider avec ceci? Serait extrêmement apprécié. Cela signifie vraiment beaucoup. Si quelqu'un veut vraiment m'aider à vivre, s'il vous plaît laissez une adresse de messagerie instantanée. Merci beaucoup pour votre temps.

+0

Le but de ce site est d'aider les gens à résoudre leurs problèmes, et de le faire publiquement afin que d'autres puissent en bénéficier. S'il vous plaît poster un code que vous avez essayé, et une description de ce qui ne fonctionne pas, avec des messages d'erreur. –

+0

Cela ne va rien aider. Mon code est essentiellement EXACTEMENT sur le site auquel je suis lié. Beaucoup de code là-bas. J'ai besoin d'une réponse depuis plusieurs jours maintenant, quelqu'un pourrait-il m'aider s'il vous plaît? – Cloakbot

+0

Ce lien va plus que probablement disparaître après un certain temps .. Ce site, cependant, conserverait le code que vous mettez ici. – abelito

Répondre

5

Ce code fonctionne pour moi:

Obtenir la connexion forme (dans mon cas, le cookie est en fait lorsque je récupère la connexion page)

URL url = new URL(formPage); 
    URLConnection conn = url.openConnection(); 

    String cookieHeader = conn.getHeaderFields().get("Set-Cookie").get(0); 
    Matcher m = JSESSION_PATTERN.matcher(cookieHeader); 
    m.find(); 
    jSessionId = m.group(1); 

Je dois aussi prendre un valeur CSRF aussi bien, mais je vais l'omettre maintenant.

Je me connecte alors en faisant:

URL url = new URL(formPage); 

    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

    conn.setRequestProperty("Cookie", "JSESSIONID=" + encode(jSessionId, "UTF-8")); 

    conn.setRequestMethod("POST"); 
    conn.setDoOutput(true); 
    conn.setDoInput(true); 

    DataOutputStream out = new DataOutputStream(conn.getOutputStream()); 
    out.writeBytes(String.format("_csrf_token=%s&xyz=%s&zyx=%s", 
      encode(csrfToken, "UTF-8"), 
      encode(USER, "UTF-8"), 
      encode(PASS, "UTF-8"))); 

    out.close(); 

    // I have absolutely no idea why this is needed. 
    conn.getInputStream().close(); 


    String cookieHeader = conn.getHeaderFields().get("Set-Cookie").get(0); 
    Matcher m = JSESSION_PATTERN.matcher(cookieHeader); 
    m.find(); 
    jSessionId = m.group(1); 

Je peux ensuite récupérer et pages de processus en utilisant

URL url = new URL(thePage); 
    URLConnection conn = url.openConnection(); 

    conn.setRequestProperty("Cookie", "JSESSIONID=" + encode(jSessionId, "UTF-8")); 

    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    String str; 
    while ((str = in.readLine()) != null) { 
     // process str... 

Hope that helps!

Questions connexes