Intereting Posts
Используйте локальную переменную в preg_replace_callback – PHP Сроки PHP заканчиваются слишком рано Оператор сравнения «==» в путанице PHP Что означает «6k views» и как я могу отформатировать число в PHP? Предупреждение: mysql_connect (): Нет такого файла или каталога (попытка подключения через unix: ///tmp/mysql.sock) в PDF-экспорт в php какая разница между циклами и для каждого цикла в php Laravel и просмотр кэширования в процессе разработки – не могут сразу увидеть изменения Значения массива сохраняются и исчезают в php? Форма Symfony – доступ Entity внутри дочерней записи Тип в CollectionType Laravel redirect () -> route () не работает корректно (просмотр в старом состоянии никогда не обновляется) scandir () сортировать по дате изменения не может видеть страницы с KnpPaginatorBundle Regex / code для исправления поврежденных сериализованных данных PHP Как получить объект Container из LifecycleEventArgs postLoad в Entity?

Копирование файлов cookie с первого ответа на следующий запрос

Я отправляю первый 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; Путь = /

Когда я использую 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. Как я могу запретить добавлять атрибуты «путь» и «домен» в заголовок?

Благодаря!

Решил. В моей присущей новизне я использовал отдельные объекты 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! */