使会话工作与Curl (ZF2)


Make session work with Curl (ZF2)

我在Zend Framework 2应用程序中使用REST。为了测试rest调用,我使用Curl发送rest请求,如下所示:

$client = new Http'Client();
$client->setAdapter(new Http'Client'Adapter'Curl());
$request = new Http'Request();
$request->setUri($url);
$request->setMethod($method);
$response = $client->dispatch($request);
$jsonString = $response->getContent();

一切正常,除了Curl请求似乎忽略了会话。我需要访问登录的用户在我的休息请求处理,例如使Acl工作。当我使用AngularJS发送REST请求时,会话实际工作。下面是我如何设置会话的:

$storage = new SessionArrayStorage();
$manager = new SessionManager($config, $storage);
$session = new Session('surveylab', $manager);

如何将会话信息传递给Curl,以便在Curl请求中访问会话?

检查cURL选项

CURLOPT_COOKIEFILE
CURLOPT_COOKIEJAR

查找cURL使用它们的示例:

curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookie.txt");

将您的登录凭据作为post发送到您的登录url,从结果中提取cookie并将其与下一个请求一起发送。我不知道您的应用程序是否会随着时间的推移而更新cookie,但如果有必要,您应该更新它们。一些示例代码:

curl_setopt_array($ch, array(
    CURLOPT_URL => "http://your/url",
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_HTTPHEADER => array('Cookie: ' . $cookies . '"'),
    CURLOPT_HEADER => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_POST => count($postData),
    CURLOPT_POSTFIELDS => $post_string
));