2010-11-18 17 views
2

J'envoie une première requête HTTP à l'aide HttpRequest-> send(), et je reçois une réponse 302 avec les éléments suivants en-têtes Set-Cookie:les cookies Copie de la première réponse à la demande suivante

  • Set- Cookie: SESSION_SCOPE = 1; chemin =/
  • Set-Cookie: III_EXPT_FILE = aa2171; chemin = /; domain = .example.com
  • Set-Cookie: III_SESSION_ID = 193a3ce5aaadea85937c25cd0430332f; domaine = .example.com; path =/

Lorsque j'utilise HttpRequest-> getResponseCookies(), c'est ce que le contenu extrait ressemble à:

Array ( 
- [0] => stdClass Object ([cookies] => Array ([SESSION_SCOPE] => 1) [extras] => Array () [flags] => 0 [expires] => 0 [path] =>/[domain] =>) 
- [1] => stdClass Object ([cookies] => Array ([III_EXPT_FILE] => aa2171) [extras] => Array () [flags] => 0 [expires] => 0 [path] =>/[domain] => .example.com) 
- [2] => stdClass Object ([cookies] => Array ([III_SESSION_ID] => 193a3ce5aaadea85937c25cd0430332f) [extras] => Array () [flags] => 0 [expires] => 0 [path] =>/[domain] => .example.com) 
) 

Maintenant, je dois copier ces cookies à la prochaine demande sortante à la emplacement redirigé. J'utilise HttpRequest-> setCookies(), dans lequel l'argument est le tableau qui a été retourné à partir de l'appel précédent getResponseCookies().

Ce que je vois dans la requête sortante est:

Cookie: 0%5Bcookies%5D%5BSESSION_SCOPE%5D=1; 0%5Bflags%5D=0; 0%5Bexpires%5D=0; 0%5Bpath%5D=%2F; 0%5Bdomain%5D=; 1%5Bcookies%5D%5BIII_EXPT_FILE%5D=aa2171; 1%5Bflags%5D=0; 1%5Bexpires%5D=0; 1%5Bpath%5D=%2F; 1%5Bdomain%5D=.example.com; 2%5Bcookies%5D%5BIII_SESSION_ID%5D=193a3ce5aaadea85937c25cd0430332f; 2%5Bflags%5D=0; 2%5Bexpires%5D=0; 2%5Bpath%5D=%2F; 2%5Bdomain%5D=.example.com 

Mes questions sont les suivantes:

  1. Quelle est la bonne façon de le faire? Parce que clairement les index de tableau sont également ajoutés à l'en-tête
  2. Comment puis-je empêcher le codage url des paramètres?
  3. Comment puis-je empêcher les attributs 'path' et 'domain' d'être ajoutés à l'en-tête?

Merci!

Répondre

3

Résolu. Dans ma nouveauté inhérente, j'utilisais des objets HttpRequest séparés pour les première et deuxième transactions. Au lieu de cela, après avoir créé la première requête, j'ai simplement appelé le enableCookies() method et j'ai réutilisé le même objet pour envoyer la deuxième requête.

En bref:

$URL1 = (main url); 

/* Construct and send the first request */ 
$r1 = new HttpRequest ($URL1, METH_POST); 
$r1->enableCookies(); 
$r1->setPostFields (...); 
$r1->send(); 

/* Verify that the response is in fact a 302 first! */ 

$URL2 = $URL1 . $r1->getResponseHeader("Location"); 

/* Construct and send the second request */ 
$r1 = new HttpRequest ($URL2, METH_POST); 
$r1->send(); 

/* Success! */