web-dev-qa-db-fra.com

jsoup postant et cookie

J'essaie d'utiliser jsoup pour me connecter à un site, puis pour récupérer des informations. Je rencontre un problème. Je peux me connecter avec succès et créer un document à partir de index.php, mais je ne peux pas obtenir d'autres pages sur le site. Je sais que je dois créer un cookie après la publication de mon message, puis le charger lorsque j'essaie d'ouvrir une autre page du site. Mais comment je fais ça? Le code suivant me permet de me connecter et d’obtenir index.php

Document doc = Jsoup.connect("http://www.example.com/login.php")
               .data("username", "myUsername", 
                     "password", "myPassword")
               .post();

Je sais que je peux utiliser Apache httpclient pour le faire, mais je ne veux pas. 

47
Gwindow

Lorsque vous vous connectez au site, vous définissez probablement un cookie de session autorisé qui doit être envoyé lors de demandes ultérieures pour maintenir la session.

Vous pouvez obtenir le cookie comme ceci:

Connection.Response res = Jsoup.connect("http://www.example.com/login.php")
    .data("username", "myUsername", "password", "myPassword")
    .method(Method.POST)
    .execute();

Document doc = res.parse();
String sessionId = res.cookie("SESSIONID"); // you will need to check what the right cookie name is

Et ensuite envoyez-le à la prochaine requête comme:

Document doc2 = Jsoup.connect("http://www.example.com/otherPage")
    .cookie("SESSIONID", sessionId)
    .get();
98
Jonathan Hedley
//This will get you the response.
Response res = Jsoup
    .connect("loginPageUrl")
    .data("loginField", "[email protected]", "passField", "pass1234")
    .method(Method.POST)
    .execute();

//This will get you cookies
Map<String, String> loginCookies = res.cookies();

//And this is the easiest way I've found to remain in session
Document doc = Jsoup.connect("urlYouNeedToBeLoggedInToAccess")
      .cookies(loginCookies)
      .get();

Où était le code:

Document doc = Jsoup.connect("urlYouNeedToBeLoggedInToAccess").cookies().get(); 

J'avais des difficultés jusqu'à ce que je le change en:

Document doc = Jsoup.connect("urlYouNeedToBeLoggedInToAccess").cookies(cookies).get();

Maintenant, cela fonctionne parfaitement.

1
user1935501

Voici ce que vous pouvez essayer ...

import org.jsoup.Connection;


Connection.Response res = null;
    try {
        res = Jsoup
                .connect("http://www.example.com/login.php")
                .data("username", "your login id", "password", "your password")
                .method(Connection.Method.POST)
                .execute();
    } catch (IOException e) {
        e.printStackTrace();
    }

Enregistrez maintenant tous vos cookies et faites une demande à l’autre page de votre choix.

//Store Cookies
cookies = res.cookies();

Faire une demande à une autre page.

try {
    Document doc = Jsoup.connect("your-second-page-link").cookies(cookies).get();
}
catch(Exception e){
    e.printStackTrace();
}

Demandez si une aide supplémentaire est nécessaire.

0
iamvinitk