【问题标题】:PHP - CURL - Set-Cookie Header (Ignoring dots)PHP - CURL - Set-Cookie 标头(忽略点)
【发布时间】:2017-08-09 13:54:47
【问题描述】:

我试图通过登录到外部站点来获取 Set-Cookie 值,然后使用该值执行不同的操作。我无法用 CookieJar 保存它,我需要从函数中返回字符串。

无论如何。预期的 Cookie 应如下所示:“JSESSIONID=123.cls_rs2a_8009”,但我得到的是“JESSIONID=123”

所以它似乎忽略了点之后的所有内容 - 或者它不像浏览器那样接收它。

有什么帮助吗?

当前代码示例未显示 URL:

$headers = [];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADERFUNCTION,
    function($curl, $header) use (&$headers){
        $len = strlen($header);
        $header = explode(':', $header, 2);
        if (count($header) < 2)
             return $len;

        $name = strtolower(trim($header[0]));
        if (!array_key_exists($name, $headers))
            $headers[$name] = [trim($header[1])];
        else
            $headers[$name][] = trim($header[1]);
        return $len;
    }
);

$data = curl_exec($ch);
var_dump($headers);

【问题讨论】:

    标签: php curl


    【解决方案1】:

    使用 Guzzle 可能会更容易一些。来自Guzzle Docs

    // Use a specific cookie jar
    $jar = new \GuzzleHttp\Cookie\CookieJar;
    $r = $client->request('GET', 'http://httpbin.org/cookies', [
        'cookies' => $jar
    ]);
    

    从您的示例来看,您似乎缺少headers in response

    // get headers too with this line
    curl_setopt($ch, CURLOPT_HEADER, 1);
    

    您也可以尝试获取full cookies list

    curl_getinfo($curl, CURLINFO_COOKIELIST);
    

    这个方法也很方便:Guzzle cookies handling

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-02-08
      • 2019-03-26
      • 2018-08-10
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 2011-09-27
      • 1970-01-01
      相关资源
      最近更新 更多