我使用curl和laravel,我需要在控制器内启动一个函数。
但是当我把
dd('test');
在命名空间之后它是print.but当我尝试使用函数时a会话已过期
这是curl的代码
// Préparation des données
$data = [];
$data["code__client"] = "VERTDIS13";
$data["status"] = "90";
$data["numero__incident"] = "INC544842";
// On tranforme le tableau PHP en objet JSON
$data = json_encode($data);
// Envoi au serveur
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://localhost:3000/notification/server");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "data=" . $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, true);
$server_output = curl_exec($ch);
$error = curl_error($ch);
if($error!=""){ dd($error);}
curl_close($ch);
// Ici pour tester j'affiche ce que le serveur renvoi
return $server_output;
在控制器内部我试图打印数据,但它不起作用
你看到了这个问题吗?感谢您的帮助。
答案 0 :(得分:0)
我假设您从应用程序中提取数据? 对我来说,看起来CSRF令牌丢失或者实际上是无效的。
for ($i = 0; $i < $metas->length; $i++){
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'csrf-token')
$csrfToken = $meta->getAttribute('content');
}
$headers = array();
$headers[] = "Cookie: X-CSRF-Token=$csrfToken";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
放手一搏
答案 1 :(得分:0)
会话过期响应对我来说听起来好像您正在对您的应用程序执行多个连续的curl请求。如果是这种情况,并且您的应用程序依赖于会话cookie,您可以创建一个简单的文本文件,该文件可以读取和写入执行curl请求的脚本,并将其添加到您的代码中:
$cookie_file = "/the/path/to/your/cookiefile.txt";
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
将$cookie_file
中的路径更改为您创建的文本文件的完整文件系统路径,curl将保留通过响应返回的会话cookie,并在连续请求中使用它们。
为了实现这一点,我认为你应该删除这行
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
因为这会建议curl忽略文件中的cookie。
除此之外,我认为该行
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, true);
也已过时,因为您没有在curl请求中提供基本身份验证凭据。