2015-10-04 114 views
0

如何配置Goutte客戶端以使用文件將Cookie存儲在文件中?我知道它是GuzzleHttp客戶端的一種包裝。但我無法將其配置爲將Cookie保存到文件以在請求之間重複使用它們。Goutte客戶端將Cookie保存到文件

試圖擴展Goutte客戶端,方法doRequest,但我不明白如何正確執行此操作。

有沒有人使用Goutte客戶端cookie保存到文件?

回答

2

我不認爲有一種簡單的方法可以實現這一點,因爲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)); 
    } 
} 
+0

是的。這個想法很好。很難過,8個月沒有更新:( – SpartakusMd

相關問題