我在一个PHP脚本中使用Guzzle get请求来获取另一个。
$guzzle->get("urltomysecondpage")->getBody();
但是,Guzzle不知道会话ID cookie,因此我的目标脚本无法访问会话变量。
文档说明我所要做的就是将“cookies”设置为“true”,Guzzle将使用与调用脚本相同的cookie集。
$guzzle->get("urltomysecondpage", ['cookies' => TRUE])->getBody();
但是,这根本行不通。目标脚本看不到cookie。文档还允许显式设置一组cookie,如下所示:
$guzzle->get("urltomysecondpage", ['cookies' => ['PHPSESSID'=>$_COOKIE['PHPSESSID']]])->getBody();
它可以工作,但是如果我指定其中一个cookie来获得密钥“PHPSESSID”则不行。如果我这样做,Apache服务器完全挂起。不仅是当前请求,而且它还停止响应所有请求。
发生了什么事?
答案 0 :(得分:0)
我在使用cookies => true
选项时遇到了一些麻烦。您是否尝试过提供默认CooieJar
?
示例:
$jar = new GuzzleHttp\Cookie\CookieJar();
$default = [
"cookies" => $jar
];
$c = new GuzzleHttp\Client(["defaults" => $default]);
默认情况下,同一个cookie jar设置为该客户端发出的每个请求。
答案 1 :(得分:0)
网络服务器无法为2个请求打开同一会话。要解决此问题,您可以先关闭会话,然后在用Guzzle发出请求后重新打开它。
示例:
session_start();
$sessionId = session_id();
session_write_close();
$client = new Client(
array(
'base_uri' => 'http://www.yoursite.tld',
'cookies' => false,
)
);
$cookie = new GuzzleHttp\Cookie\SetCookie();
$cookie->setName('PHPSESSID');
$cookie->setValue($sessionId);
$cookie->setDomain('www.yoursite.tld');
$cookieJar = new CookieJar(
false,
array(
$cookie,
)
);
$response = $client->request(
'GET',
'/urltomysecondpage',
array(
'cookies' => $cookieJar,
)
);
session_start();