Bonjour,
Voici la communication échangée entre mon client et mon serveur. L'objectif étant de s'authentifier, puis d'envoyer à un service l'adresse email de mon utilisateur à créer.
Le serveur est sous symfony, et côté client, je forge moi-même mes requêtes. Voir la partie du script php qui construit les requêtes au bas de ce message.
Mon problème est que je perds la session ... où en tout cas mon serveur ne la retrouve pas. Est-ce qu'il y a un problème dans mes entêtes (surtout celles concernant le cookie ) ?
======================================================================
====== Echange des requêtes brutes HTTP entre client et serveur ======
======================================================================
Etape 1: Login
Commentaire : Ici l'authentification se passe bien, je récupère même le cookie qui correspond a l'enregistrement du username en session côté serveur
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 - Site-client envoi: POST /api_dev.php/login HTTP/1.1 Host: server.localhost Referer: http://client.localhost/frontend_dev.php/souscrire Content-type: application/x-www-form-urlencoded Content-length: 34 Connection: close username=formation&password=blabla - Serveur répond : HTTP/1.1 202 Accepted Date: Mon, 20 Dec 2010 16:04:37 GMT Server: Apache/2.2.11 (Win32) PHP/5.2.6 X-Powered-By: PHP/5.2.6 Set-Cookie: symfony=fmn9br8i4rkfkrdnjlhea6p4k7; path=/ Content-Length: 0 Connection: close Content-Type: text/html; charset=utf-8
Etape 2: Demande d'un fichier
Commentaire : Ici je récupère une fichier xml, mais il ne requiert pas d'authentification, donc aucun problème
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
24
25 - Site-client envoi: GET /api_dev.php/formation/diffusion-list.xml HTTP/1.1 Host: server.localhost Referer: http://client.localhost/frontend_dev.php/souscrire Cookie: symfony=fmn9br8i4rkfkrdnjlhea6p4k7 Content-length: 0 Connection: close - Serveur répond : HTTP/1.1 200 OK Date: Mon, 20 Dec 2010 16:04:37 GMT Server: Apache/2.2.11 (Win32) PHP/5.2.6 X-Powered-By: PHP/5.2.6 Content-Length: 155 Connection: close Content-Type: text/xml; charset=utf-8 <?xml version="1.0" encoding="utf-8"?> <diffusionLists> <diffusionList> <id>2</id> <name>news_hebdo</name> </diffusionList> </diffusionLists>
Etape 3: Demande d'inscription d'un utilisateur (en utilisant optionnellement le résultat du XML précédemment fourni, mais ca n'est pas important)
Commentaire : Les problèmes commencent ici; je renvois du côté de mon serveur une erreur 401 pour dire que la ressources nécessite une authentification, et que le client n'est pas connecté (malgré l'étape 1 snif
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 - Site-client envoi: POST /api_dev.php/contact/subscribe HTTP/1.1 Host: server.localhost Referer: http://client.localhost/frontend_dev.php/souscrire Cookie: symfony=fmn9br8i4rkfkrdnjlhea6p4k7 Content-type: application/x-www-form-urlencoded Content-length: 25 Connection: close contact%5Bemail%5D=bigltnt@monemail.com - Serveur répond : HTTP/1.1 401 Unauthorized Date: Mon, 20 Dec 2010 16:04:51 GMT Server: Apache/2.2.11 (Win32) PHP/5.2.6 X-Powered-By: PHP/5.2.6 Content-Length: 0 Connection: close Content-Type: text/html; charset=utf-8). D'ailleurs, en regardant $_SESSION il n'y a effectivement rien ...
Etape 4: Afin de gérer la perte de session dûe a une expiration, je refais l'etape de login automatiquement, remix de l'étape 1 donc ...
Commentaire : Et ce ***** de serveur me dit que tout vas bien, d'ailleurs si je regarde $_SESSION il enregistre effectivement ma variable username
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 - Site-client envoi: POST /api_dev.php/login HTTP/1.1 Host: server.localhost Referer: http://client.localhost/frontend_dev.php/souscrire Cookie: symfony=fmn9br8i4rkfkrdnjlhea6p4k7 Content-type: application/x-www-form-urlencoded Content-length: 34 Connection: close username=formation&password=blabla - Serveur répond : HTTP/1.1 202 Accepted Date: Mon, 20 Dec 2010 16:04:51 GMT Server: Apache/2.2.11 (Win32) PHP/5.2.6 X-Powered-By: PHP/5.2.6 Content-Length: 0 Connection: close Content-Type: text/html; charset=utf-8
Question : Est-ce normal que je ne recoive pas de directive "Set-Cookie:" ?
Etape 5 : Une fois reconnecté, je retente la requête d'inscription de mon utilisateur
Commentaire : Ben oui ... ça ne marchait pas la première fois il n'y a pas de mystère .... ca marche toujours pas !
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 - Site-client envoi: POST /api_dev.php/contact/subscribe HTTP/1.1 Host: server.localhost Referer: http://client.localhost/frontend_dev.php/souscrire Cookie: symfony=fmn9br8i4rkfkrdnjlhea6p4k7 Content-type: application/x-www-form-urlencoded Content-length: 25 Connection: close contact%5Bemail%5D=bigltnt@monemail.com - Serveur répond : HTTP/1.1 401 Unauthorized Date: Mon, 20 Dec 2010 16:04:51 GMT Server: Apache/2.2.11 (Win32) PHP/5.2.6 X-Powered-By: PHP/5.2.6 Content-Length: 0 Connection: close Content-Type: text/html; charset=utf-8![]()
======================================================================
========== Partie du script qui construit mes requêtes HTTP ==========
======================================================================
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 <?php // [...] Des trucs avant $fp = fsockopen($host, 80); $request = ''; // send the request headers: $request .= ( $request_type == self::REQUEST_POST ? 'POST' : 'GET' ) . " $path HTTP/1.1\r\n"; $request .= "Host: " . $host . "\r\n"; $request .= "Referer: " . $this->_referer . "\r\n"; // Gestion du cookie if ( $cookie = $this->_getCookie() ) { //exit( $cookie ); $request .= "Cookie: " . $cookie . "\r\n"; } // Content type si POST request if ( $request_type == self::REQUEST_POST ) $request .= "Content-type: application/x-www-form-urlencoded\r\n"; $request .= "Content-length: ". strlen($data) ."\r\n"; $request .= "Connection: close\r\n\r\n"; $request .= $data; fputs($fp, $request); $result = ''; while(!feof($fp)) { // receive the results of the request $result .= fgets($fp, 128); } // close the socket connection: fclose($fp); // [...] Des trucs après ?>
Partager