PHP CURL Разбор нескольких заголовочных файлов cookie с использованием preg_match - PullRequest
1 голос
/ 17 июня 2011

Я использую PHP / CURL для автоматизации вызовов между двумя тесно связанными воспламенителем кода.

Воспламенитель кода возвращает два set-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, как будто они сделали вызов напрямую)

В настоящее время я использую следующее для анализа 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 Ответ

7 голосов
/ 17 июня 2011

Предполагая, что $Head - это одна строка, содержащая все заголовки файлов cookie, вы ищете preg_match_all().preg_match() останавливается после нахождения первого совпадения.

При preg_match_all() совпадающие целые строки будут в $Cookies[0].Ваши совпадения подшаблона будут в $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
        )

)

Кроме того, ваш подстановочный знак (.*) по умолчанию жадный, поэтому он может использовать обе строки вместе, еслиЗаголовки не на отдельных строках.Если это так, попробуйте (.*?), чтобы сделать его неприличным.

...