PHP CURL Разбор нескольких заголовочных файлов cookie с использованием preg_match
Я использую PHP/CURL для автоматизации вызовов между двумя тесно связанными воспламенителем кода.
Код воспламенителя возвращается два set-cookie
заголовки, один для безопасного cookie с реальными данными сеанса, один для незащищенных соединений с пустым сеансом...
Set-Cookie: overshare=a%3A0%3A%7B%7D; expires=Thu, 17-Jun-2010 05:09:32 GMT; path=/
Set-Cookie: overshare=BdHJPVt...STsCxnMBj; path=/; secure
Я пытался разобрать безопасный cookie (оба сайта находятся в одном домене, поэтому, если я получаю обновленную информацию о сеансе через CURL, я должен обновить cookie клиента, как если бы они сделали вызов напрямую)
В настоящее время я использую следующее для анализа куки:
preg_match('/Set-Cookie: (.*)\b/', $Head, $Cookies);
что дает мне в $Cookies
:
Array
(
[0] => Set-Cookie: overshare=a%3A0%3A%7B%7D; expires=Thu, 17-Jun-2010 05:09:32 GMT; path
[1] => overshare=a%3A0%3A%7B%7D; expires=Thu, 17-Jun-2010 05:09:32 GMT; path
)
но это соответствует только первому заголовку set-cookie. Мои навыки регулярных выражений плохие - как я могу сопоставить второй заголовок?
1 ответ
Если предположить, $Head
is a single string containing all of the cookie headers, you're looking for preg_match_all()
, preg_match()
stops after finding the first match.
С preg_match_all()
, matched entire strings will be in $Cookies[0]
, Your subpattern matches will be in $Cookies[1]
,
$Head = <<<HEAD
Set-Cookie: overshare=a%3A0%3A%7B%7D; expires=Thu, 17-Jun-2010 05:09:32 GMT; path=/
Set-Cookie: overshare=BdHJPVt...STsCxnMBj; path=/; secure
HEAD;
preg_match_all('/Set-Cookie: (.*)\b/', $Head, $Cookies);
print_r($Cookies);
доходность
Array
(
[0] => Array
(
[0] => Set-Cookie: overshare=a%3A0%3A%7B%7D; expires=Thu, 17-Jun-2010 05:09:32 GMT; path
[1] => Set-Cookie: overshare=BdHJPVt...STsCxnMBj; path=/; secure
)
[1] => Array
(
[0] => overshare=a%3A0%3A%7B%7D; expires=Thu, 17-Jun-2010 05:09:32 GMT; path
[1] => overshare=BdHJPVt...STsCxnMBj; path=/; secure
)
)
Кроме того, ваш подстановочный знак (.*)
по умолчанию является жадным, поэтому может потреблять обе строки вместе, если заголовки не находятся на отдельных строках. Если так, попробуйте (.*?)
сделать его неловким.