【问题标题】:curl with laravel return session expiredcurl 与 laravel 返回会话已过期
【发布时间】:2018-05-04 13:19:23
【问题描述】:

我在 laravel 中使用 curl,我需要在控制器中启动一个函数。

但是当我把

dd('test'); 

在命名空间之后是 print。但是当我尝试使用函数时,会话已过期

这是卷曲的代码

// 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;

在控制器内部我尝试打印数据但它不起作用

你看到问题了吗?

感谢您的帮助。

【问题讨论】:

    标签: laravel curl


    【解决方案1】:

    对我来说,会话​​过期响应听起来好像您正在对您的应用程序执行多个连续的 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 请求中提供基本的身份验证凭据。

    【讨论】:

    • 您好,感谢您的帮助。我删除了该行并将路径放入 cookie 但我有同样的问题......(我可以打印文件内容)
    【解决方案2】:

    我假设您从应用程序中提取数据? 在我看来,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);
    

    More about CSRF & cURL

    试一试

    【讨论】:

    • 我试图让你编写代码,但即使有帮助我也无法恢复元数据中的令牌
    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 2013-03-06
    • 2016-08-04
    • 2021-03-05
    • 2019-06-08
    • 2017-07-03
    • 1970-01-01
    • 2013-09-27
    相关资源
    最近更新 更多