PHP CURL使用preg_match解析多个set-cookie头

Bas*_*sic 1 php regex curl 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
Run Code Online (Sandbox Code Playgroud)

我一直在尝试解析安全cookie(两个站点都在同一个域上,所以如果我通过CURL获得更新的会话信息,我应该更新客户端cookie,就像他们直接拨打电话一样)

我目前正在使用以下内容来解析cookie:

preg_match('/Set-Cookie: (.*)\b/', $Head, $Cookies);
Run Code Online (Sandbox Code Playgroud)

这给了我$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
)
Run Code Online (Sandbox Code Playgroud)

但这只匹配第一个set-cookie标头.我的正则表达能力很差 - 如何匹配第二个标题?

Wis*_*guy 7

假设$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);
Run Code Online (Sandbox Code Playgroud)

产量

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
        )

)
Run Code Online (Sandbox Code Playgroud)

此外,(.*)默认情况下,您的通配符是贪婪的,因此如果标题不在单独的行上,它可能会同时使用两个字符串.如果是这样,试着(.*?)让它不合适.