Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Goutte客户端将cookies保存到文件_Php_Cookies_Guzzle_Goutte - Fatal编程技术网

Php Goutte客户端将cookies保存到文件

Php Goutte客户端将cookies保存到文件,php,cookies,guzzle,goutte,Php,Cookies,Guzzle,Goutte,如何配置Goutte客户端以使用文件将Cookie存储在文件中?我知道它是一种围绕HTTP客户机的包装器。但我无法将其配置为将cookies保存到文件中,以便在请求之间重用它们 尝试扩展Goutte客户端,方法是doRequest,但我不知道如何正确地执行此操作 有人使用过Goutte客户端并将cookie保存到文件中吗?我不认为有一种简单的方法可以实现这一点,因为Goutte强制使用guzzle的CookieJar类,该类在脚本执行后不会持久存在。通过自己的类来使用FileCookieJar之

如何配置Goutte客户端以使用文件将Cookie存储在文件中?我知道它是一种围绕HTTP客户机的包装器。但我无法将其配置为将cookies保存到文件中,以便在请求之间重用它们

尝试扩展Goutte客户端,方法是
doRequest
,但我不知道如何正确地执行此操作


有人使用过Goutte客户端并将cookie保存到文件中吗?

我不认为有一种简单的方法可以实现这一点,因为Goutte强制使用guzzle的CookieJar类,该类在脚本执行后不会持久存在。通过自己的类来使用FileCookieJar之类的东西会很好,但由于硬编码的CookieJar调用,这是不可能的(有人确实为它创建了PR,但已经几个月了,Goutte项目中最近没有任何活动)

我们可以做的是创建访问BrowserKit CookieJar并存储其内容的方法。下面是一些示例代码:

// Will hold path to a writable location/file
protected $cookieFilePath;

public function setCookieFilePath($cookieFilePath)
{
    $this->cookieFilePath = $cookieFilePath;
    if (is_file($cookieFilePath)) {
        // Load cookies and populate browserkit's cookie jar
        $cookieJar = $this->client->getCookieJar();
        $cookies = unserialize(file_get_contents($cookie));
        foreach ($cookies as $cookie) {
            $cookieJar->set($cookie);
        }
    }
}

// Call this whenever you need to save cookies. Maybe after a request has been made since BrowserKit repopulates it's CookieJar from the Response returned.
protected function saveCookies()
{
    $cookieFilePath = $this->getCookieFilePath();
    $goutteClient = $this->getGoutteClient();
    $cookieJar = $goutteClient->getCookieJar();
    $cookies = $cookieJar->all();
    if ($cookies) {
        file_put_contents($cookieFilePath, serialize($cookies));
    }
}

以下是一个完美的使用方法:

//获取所有cookie
$cookies=$client->getCookieJar()->all();
$cookies=数组映射($strval',$cookies);//Cookie::\uu toString
文件内容('cookies.json',json编码($cookies));
要使用cookie文件,请执行以下操作:

使用痛风\客户端;
使用Symfony\Component\BrowserKit\CookieJar;
$client=新客户端();
$cookieJar=新的cookieJar();
$cookies=json\u解码(
文件获取内容('cookies.json'),
真的
);
$cookieJar->updateFromSetCookie($cookies);
$client=newclient(null,null,$cookieJar);

这里有一种方法,对我来说很有效,它取自


是的。这个主意很好。令人遗憾的是,8个月没有更新:(这对我来说是一个很大的帮助:
<?php
//file to store cookie data
$cookieFile = 'app/cookiejar.txt';

// Start with an empty jar if we don't have any cookies saved yet
$cookieJar = is_file($cookieFile) ?
    unserialize( file_get_contents($cookieFile)) :
    null;

// Initialize the client with the cookie jar
$client = new Client(null, null, $cookieJar);

// Requests and stuff you need to do

// save cookies:
$cookieJar = $client->getCookieJar();
file_put_contents( $cookieFile, serialize( $cookieJar ) );