PHP - CURL - 设置Cookie标头(忽略点)

时间:2017-08-09 13:54:48

标签: php curl

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

反正。预期的Cookie应该如下所示:“JSESSIONID = 123.cls_rs2a_8009”但我得到“JESSIONID = 123”

因此它似乎忽略了点之后的所有内容 - 或者它没有像浏览器一样接收它。

对此有何帮助?

当前代码示例未显示网址:

$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);

1 个答案:

答案 0 :(得分: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

希望有所帮助。