Bonjour la communauté,
Après plusieurs heures de lectures et de code, je n'arrive pas à faire suivre une authentification par HTTP POST...
J'arrive bien à me loguer avec le login/pass et récupérer le cookie PHPSESSID.
Ensuite j'écris le cookie dans mes requetes GET sur des pages privés, mais celui-ci ne reconnait pas ma session, et me demande de m'identifier à nouveau.
Pour poster le formulaire, je fais simplement comme ceci :
J'affiche les headers reçus à chaque fois que j'en recois juste pour débuguer, et lance le slot getSession() lorsque la requête est "done".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 http = new QHttp(this); test = 0; QObject::connect(http, SIGNAL(done(bool)), this, SLOT(getSession())); QObject::connect(http, SIGNAL(responseHeaderReceived(QHttpResponseHeader)), this, SLOT(readHeader(QHttpResponseHeader))); QByteArray content = "user=test_account&passwrd=pass_de_test"; QHttpRequestHeader header("POST", "/index.php?action=login2;sa=check;wap2"); header.setValue("Host", "www.monsite.com"); header.setContentLength(content.length()); header.setContentType("application/x-www-form-urlencoded"); http->setHost("www.monsite.com"); http->request(header, content); // debug: header sent std::cout << "header sent:\n " << header.toString().toLatin1().data() << std::endl;
Le getSession :
Lors de l'execution, si je mets les bons login/pass, j'obtiens bien le MOVED TEMPORARLY en reponse:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 void ForumLogin::getSession() { std::cout << "html "<< test <<" :\n" << http->readAll().data() << std::endl; if (test <= 0) { // Si c'etait la premiere requete, donc celle de POST du login/pass // On enregistre le PHPSESSID et on demande une page privee PHPSESSID = (char*) malloc(42); strcpy(PHPSESSID, http->lastResponse().value("Set-Cookie").left(42).toLatin1().data()); // PHPSESSID=xxxx AVEC xxx faisant 32 chars test++; QHttpRequestHeader header("GET", "/index.php?action=page_privee;wap2"); header.setValue("Host", "www.monsite.com"); header.setValue("Cookie", PHPSESSID); http->setHost("www.monsite.com"); http->request(header); // debug: header sent std::cout << "header sent:\n " << header.toString().toLatin1().data() << std::endl; } // debug: quel est le PHPSESSID? std::cout << "PHPSESSID: " << PHPSESSID << std::endl; }
Premiere requete:
Le premier contenu est vide (la page a "moved temporarly") lorsque les login/pass sont corrects.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 header sent: POST /index.php?action=login2;sa=check;wap2 HTTP/1.1 Host: www.monsite.com content-length: 38 content-type: application/x-www-form-urlencoded header received: HTTP/1.1 302 Moved Temporarily Date: Wed, 10 Feb 2010 15:26:09 GMT Server: Apache Cache-Control: private Expires: Thu, 19 Nov 1981 08:52:00 GMT Pragma: no-cache X-Powered-By: PHP/5.2.12 Set-Cookie: PHPSESSID=c007cfb286ffd9bcb01a992f3d1e2cd2; path=/ Location: http://www.monsite.com/index.php?PHPSESSID=c007cfb286ffd9bcb01a992f3d1e2cd2;;wap2 Transfer-Encoding: chunked Content-Type: text/html html 0 :
Je recois une page HTTP OK avec "mauvais mot de passe" ou "identifiant inconnu" si je mets des informations erronnees.
Cependant, ca foire pour la seconde requete, il ne me reconnait pas...
Il n'a pas reconnu mon identification...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 header sent: GET /index.php?action=autobuyer;wap2 HTTP/1.1 Host: www.monsite.com Cookie: PHPSESSID=c007cfb286ffd9bcb01a992f3d1e2cd2 PHPSESSID: PHPSESSID=c007cfb286ffd9bcb01a992f3d1e2cd2 header received: HTTP/1.1 200 OK Date: Wed, 10 Feb 2010 15:26:09 GMT Server: Apache Cache-Control: private Expires: Mon, 26 Jul 1997 05:00:00 GMT Pragma: no-cache X-Powered-By: PHP/5.2.12 Last-Modified: Wed, 10 Feb 2010 15:26:10 GMT Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8 html 1 : ... une page html pour se connecter ...
J'ai pourtant passé le header.setValue("Cookie", PHPSESSID) lors de ma seconde requête.
Et je vérifie le header sent il est bon... quel est le souci ?
Partager