0
如何配置Goutte客戶端以使用文件將Cookie存儲在文件中?我知道它是GuzzleHttp客戶端的一種包裝。但我無法將其配置爲將Cookie保存到文件以在請求之間重複使用它們。Goutte客戶端將Cookie保存到文件
試圖擴展Goutte客戶端,方法doRequest
,但我不明白如何正確執行此操作。
有沒有人使用Goutte客戶端cookie保存到文件?
如何配置Goutte客戶端以使用文件將Cookie存儲在文件中?我知道它是GuzzleHttp客戶端的一種包裝。但我無法將其配置爲將Cookie保存到文件以在請求之間重複使用它們。Goutte客戶端將Cookie保存到文件
試圖擴展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));
}
}
是的。這個想法很好。很難過,8個月沒有更新:( – SpartakusMd