TLDR:当您转到 URL 或 CLI 时,我的 php 文件可以正常执行curl 请求,如果我使用 ajax 或 fetch 从站点 URL 调用此 php 文件,我没有得到任何响应,也没有错误代码。只是空白回复。
编辑** 我找到了我的 AWS 脚本的服务器日志。它正在接收 POST 请求。
[07/Sep/2024 15:44:00] "POST /update_synopsis HTTP/1.1" 200 -
我有一个托管在 AWS 上的 API,我将 JSON 发送到该 API。 6 小时前,这一切都运行良好。我没有对代码进行任何更改,现在我用来向 API 发送数据的 cURL 已损坏。我有一个 .html 页面,按下按钮时调用 php 文件。
$.post('./send.php', toForward, function(response) {
console.log(response);
console.log("submit")
}, 'json');
//OR
$.ajax({
url: 'omittingTheURL.com/send.php',
type: "POST",
dataType: "json",
success: function(data) {
console.log(data + "test"); // Alert the results
}
});
我已将代码简化为调试状态,并消除了对发送的 JSON (toForward) 的读取。这是 php 文件。我已经尝试了一些带有标头的操作,以防出现 CORS 问题,但我没有收到 CORS 错误。我知道 jQuery 是 google 的东西,所以不确定它是否通过 googles URL 发送?
if (isset($_SERVER['HTTP_ORIGIN'])) {
// should do a check here to match $_SERVER['HTTP_ORIGIN'] to a
// whitelist of safe domains
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
}
$json = json_encode(array('appliancePrompt'=> 'This is a test. Say potato.'));
$url = 'https://flask-service.6pkt8q75gkone.us-east-2.cs.amazonlightsail.com/update_synopsis'; //Mechanic AI API
$data = json_decode($json, true);
// Convert data to JSON format
$jsonData = json_encode($data);
echo $json;
// cURL setup
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonData)
));
// Execute the request
$response = curl_exec($ch);
curl_close($ch);
echo $response;
每当我使用 cURL 函数运行代码时,它都不会输出任何内容。根本没有错误日志。 cURL 上方的线条也没有回声。当我运行 cURL 时,由于某种原因,我什至没有得到
echo $json
输出。如果我注释掉curl执行,那么我会得到回声返回,并且一切看起来都正确。 JSON 的格式适合我的接收端。我无法强调这是多少小时前的工作,而且我对它做了 0 更改。我也不明白为什么它可以使用 phps 浏览器 slug 但不能使用 fetch/ajax/jquery 请求。
我使用 AWS Lightsail 托管 API 的接收端。 AWS Lightsail 似乎会进行某种负载卸载/服务器分配,每隔几天它就会转移我的应用程序所在的服务器,并导致发生 CORS 问题(其中一些服务器由于标头不同而没有此 CORS 问题)。由于我使用的是 AWS Lightsail 而不是 AWS Cloudhost,因此我无法访问任何类型的错误日志来查看此问题,因为 php 中的 cURL 不会给出 CORS 错误。
我不再使用 AWS Lightsail 来托管此应用程序,并且不再出现 CORS 问题!