【问题标题】:PHP CURL Parse multiple set-cookie headers using preg_matchPHP CURL 使用 preg_match 解析多个 set-cookie 标头
【发布时间】:2011-06-17 11:56:14
【问题描述】:

我正在使用 PHP/CURL 自动调用 2 个紧密关联的代码点火器。

代码点火器返回两个 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,就好像他们直接拨打电话一样)

我目前正在使用以下方法来解析 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 标头。我的正则表达式技能很差 - 如何匹配第二个标题?

【问题讨论】:

    标签: php regex curl preg-match


    【解决方案1】:

    假设$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
            )
    
    )
    

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

    【讨论】:

    • 谢谢你 - 特别是你发现了贪婪的比赛。
    • + 很好的解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    相关资源
    最近更新 更多