2010-11-18 2 views
2

ich eine erste HTTP-Anforderung aus mit HttpRequest- Senden> send(), und ich erhalte eine 302-Antwort mit den folgenden Set-Cookie-Header:Kopieren Cookies von der ersten Reaktion auf nächste Anfrage

  • Set- Cookie: SESSION_SCOPE = 1; Pfad =/
  • Set-Cookie: III_EXPT_FILE = aa2171; Pfad = /; domain = .beispiel.com
  • Set-Cookie: III_SESSION_ID = 193a3ce5aaadea85937c25cd0430332f; Domäne = .beispiel.com; path =/

Wenn ich HttpRequest-> getResponseCookies(), ist es das, was die extrahierten Inhalt wie folgt aussieht:

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) 
) 

Jetzt muss ich diese Cookies kopieren auf die nächste abgehende Anforderung an die umgeleiteter Standort Ich verwende HttpRequest-> setCookies(), wobei das Argument das Array ist, das vom vorherigen Aufruf getResponseCookies() zurückgegeben wurde.

Was ich in der ausgehenden Anforderung sehen ist:

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 

Meine Fragen sind:

  1. Was ist der richtige Weg, dies zu tun? Weil die Array-Indizes natürlich auch dem Header hinzugefügt werden
  2. Wie kann ich die URL-Codierung der Parameter verhindern?
  3. Wie kann ich verhindern, dass die Attribute 'Pfad' und 'Domäne' zum Header hinzugefügt werden?

Vielen Dank!

Antwort

3

Gelöst es. In meinem inhärenten Neuling verwendete ich separate HttpRequest-Objekte für die erste und zweite Transaktion.

Stattdessen habe ich einfach nach dem Erstellen der ersten Anfrage die enableCookies() method aufgerufen und das gleiche Objekt erneut verwendet, um die zweite Anfrage zu senden.

Auf den Punkt gebracht:

$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! */