Копирование файлов cookie с первого ответа на следующий запрос - PullRequest
2 голосов
/ 18 ноября 2010

Я отправляю первый HTTP-запрос, используя HttpRequest-> send (), и получаю ответ 302 со следующими заголовками Set-Cookie:

  • Set-Cookie: SESSION_SCOPE = 1;путь = /
  • Set-Cookie: III_EXPT_FILE = aa2171;Путь = /;домен = .example.com
  • Set-Cookie: III_SESSION_ID = 193a3ce5aaadea85937c25cd0430332f;домен = .example.com;path = /

Когда я использую HttpRequest-> getResponseCookies (), вот как выглядит извлеченный контент:

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

Теперь мне нужно скопировать эти файлы cookie вследующий исходящий запрос в перенаправленное местоположение.Я использую HttpRequest-> setCookies (), в котором аргумент является массивом, который был возвращен из предыдущего вызова getResponseCookies ().

В исходящем запросе я вижу следующее:

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

Мои вопросы:

  1. Как правильно это сделать?Очевидно, что индексы массива также добавляются в заголовок
  2. Как я могу предотвратить url-кодирование параметров?
  3. Как я могу предотвратить атрибуты 'path' и 'domain' издобавляется в шапку?

Спасибо!

1 Ответ

3 голосов
/ 19 ноября 2010

Решил это. В своем прирожденном новичке я использовал отдельные объекты HttpRequest для первой и второй транзакций.

Вместо этого после создания первого запроса я просто вызвал метод enableCookies () и повторно использовал этот же объект для отправки второго запроса.

В двух словах:

$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! */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...