【发布时间】:2022-09-27 10:38:14
【问题描述】:
我有一个带有 API 的大型系统。 在前端,JavaScript 使用 AJAX 与 API 对话。
我有一个 PHP 文件,它作为 CRON 作业每 5 分钟运行一次。 我希望这个 PHP 代码与 API 交互。 它必须提交的只是查询变量。 发回的只是一个数字。
例如: https://examplesite.com/api/create?id=1&data=2 这会回复一个简单的数字,即 SQL last-insert-id。
额外的: API 还需要两个 Session 变量(user-id 和 system-id) 我可以在调用我猜的 API 之前开始会话并设置它们吗? 我需要由 CRON 系统运行的 PHP 脚本来与这个 API 对话。
我试过使用 cURL 但还没有运气:
//Need to add a user-id to session, does this work?
session_start();
$_SESSION[\'user-id\'] = 1;
//HOW TO CALL API FROM CRON?
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch, CURLOPT_URL, \'https://example.com/api/create?id=1&gid=2\');
//curl_setopt($ch, CURLOPT_URL, \'http://example.com/api/create?id=1&gid=2\');
curl_setopt($ch, CURLOPT_URL, \'file://../framework/api/create.php?id=1&data=2\');
$result = curl_exec($ch);
curl_close($ch);
$result = str_replace(\"\\n\", \'\', $result); // remove new lines
$result = str_replace(\"\\r\", \'\', $result); // remove carriage returns
//Expect Result to be a number only
file_put_contents(\"curl.log\", \"[\".date(\'Y-m-d H:i:s\').\"] $result\\n\\n\", FILE_APPEND);
文件方法似乎不起作用......可能是../的路径问题 http 方法似乎不起作用...服务器环回问题?
任何关于如何最好地让我的 PHP CRON 机器人使用我的 API 的建议将不胜感激。 我只是将 API 代码复制到 CRON 中,但随后我在复制代码,并且不允许机器人测试真正的 API。
谢谢。
-
会话变量使用 cookie。您需要使用保存和发送 cookie 的 curl 选项。
-
session_start()仅适用于网页,不适用于 CLI 脚本。 -
也许我可以只包含 PHP API 文件并捕获输出?我仍然需要为它设置 $_SESSION[\'user-id\'] ......我可以在没有启动 _session() 的情况下设置它吗?
-
您发布的代码中的 URL 对我有用,没有任何 cookie。如果在
curl_exec()之后调用curl_error($ch),它的输出是什么? -
您不能将
file:URL 用作 API。 PHP 脚本只有在通过网络服务器调用时才会执行。如果您使用file:,您只需获取源代码。