我无法弄清楚如何在Goutte中设置Cookie。我正在尝试以下代码:
$client->setHeader('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36');
$client->getCookieJar()->set('SRCHUID');
我附上了这个名字的cookie图片。我该如何设置此cookie?
答案 0 :(得分:3)
Goutte with Guzzle 6
use GuzzleHttp\Cookie;
$cookieJar = new \GuzzleHttp\Cookie\CookieJar(true);
$cookieJar->setCookie(new \GuzzleHttp\Cookie\SetCookie([
'Domain' => "www.domain.com",
'Name' => $name,
'Value' => $value,
'Discard' => true
]));
$client = new Client();
$guzzleclient = new \GuzzleHttp\Client([
'timeout' => 900,
'verify' => false,
'cookies' => $cookieJar
]);
$client->setClient($guzzleclient);
return $client; //or do your normal client request here e.g $client->request('GET', $url);
答案 1 :(得分:1)
对我来说,使用GuzzleClient无法正常工作。我使用了getCookieJar返回的CookieJar。我在初始问题中看到的唯一错误是您尝试通过仅提供字符串值来设置cookie。 set方法需要Cookie实例才能工作。方法签名是:
/**
* Sets a cookie.
*
* @param Cookie $cookie A Cookie instance
*/
public function set(Cookie $cookie)
示例:
$this->client->getCookieJar()->set(new Cookie($name, $value, null, null, $domain));
注意不要编码cookie值或设置encodedValue true
Cookie的签名__construct:
/**
* Sets a cookie.
*
* @param string $name The cookie name
* @param string $value The value of the cookie
* @param string $expires The time the cookie expires
* @param string $path The path on the server in which the cookie will be available on
* @param string $domain The domain that the cookie is available
* @param bool $secure Indicates that the cookie should only be transmitted over a secure HTTPS connection from the client
* @param bool $httponly The cookie httponly flag
* @param bool $encodedValue Whether the value is encoded or not
*/
public function __construct($name, $value, $expires = null, $path = null, $domain = '', $secure = false, $httponly = true, $encodedValue = false)