如何使用 HTTP:PostAsync() 将 JSON 数据提交到我的服务器? (机器人)
Posted
技术标签:
【中文标题】如何使用 HTTP:PostAsync() 将 JSON 数据提交到我的服务器? (机器人)【英文标题】:How do I use HTTP:PostAsync() to submit JSON data to my server? (ROBLOX) 【发布时间】:2020-07-15 04:35:20 【问题描述】:所以我了解 GetAsync 的工作原理,并且我的服务器上有一些脚本可以与我要完成的任务一起工作。但就将数据获取到服务器而不是从 json 读取数据而言,我该怎么做呢?在服务器端,我的 php 脚本从提交的 JSON 中获取所有发布数据,并检查包含所有信息的数据库,如果不存在,则将其插入。 (这是一个禁令系统。但我不确定我是否正确设置了 roblox 端,或者我是否正确设置了服务器端。这是我的代码:
这是在自定义 Adonis 管理系统中运行的
SendWebBan = function(plr,UserID,Username,Agent,Comment)
local http = game:GetService("HttpService")
local Reason = "Banned in game by AAC Admin."
local url = "URL HERE/gamebanlistener.php"
local data =
["UserID"] = UserID,
["Username"] = Username,
["Agent"] = Agent,
["Reason"] = Reason,
["Comment"] = Comment
local encode = http:JSONEncode(data)
local reponse,err = pcall(function()
http:PostAsync(url,encode)
end)
print(reponse)
if reponse == "false" then
Remote.MakeGui(plr,"Notification",
Title = "Failed";
Message = "Ban Failed";
Duration = 10;
)
elseif reponse == "true" then
Remote.MakeGui(plr,"Notification",
Title = "Success";
Message = "Ban Successful";
Duration = 10;
)
else
Remote.MakeGui(plr,"Notification",
Title = "Failed";
Message = "Ban Failed";
Duration = 10;
)
end
end;
<?php
$ServerKey = "key here";
$APIKey = $_POST["key"];
$Data = json_decode($_POST['data']);
$UserID = $Data.UserID;
$Username = $Data.Username;
$Agent = $Data.Agent;
$Reason = $Data.Reason;
$Comment = $Data.Comment;
$Date = date("d/m/Y");
if($APIKey == $ServerKey)
//$conn = mysqli_connect($host,$dbuser,$dbpassword,$db);
$Connection = mysqli_connect(sql credentials here);
if($Connection->connect_errno)
echo('"Status":"'. $Connection->connect_errno . '"');
else
$BlacklResult = $Connection->query("SELECT * FROM bans"); //Blacklist is the name of my Bans database
if($BlacklResult->num_rows > 0)
while($Row = $BlacklResult->fetch_assoc())
if($Row != null)
if($Row["UserID"] == $UserID)
echo 'Status:false';
return;
else
$Connection->query("INSERT INTO bans(UserID, Username, Agent, BanReason, BanComment,DateOfBan) VALUES(".$UserID.",".$Username.",".$Agent.",".$Reason.",".$Comment.",".$Date.");");
echo 'Status:true';
;
;
;
;
else
echo('"Status":"API KEY"');
;
?>
【问题讨论】:
$_POST["key"]
有值吗?
是的,确实如此。为了安全起见,我只是从这个例子中删除了它。应该只是将它设置为 key_here 之类的东西
【参考方案1】:
当你调用一个函数时,返回的元组是一个布尔值,后跟函数的结果。如果函数抛出错误,则将结果替换为错误字符串。尝试进行此更改:
local success, result = pcall(function()
return http:PostAsync(url,encode)
end)
print(success, result)
if success then
-- request went through, parse the response from your endpoint
else
-- parse the http error
end
【讨论】:
是的,这行得通,但是如何正确解析服务器端的数据?如果是这样,请在 PHP 上使用 json_decode 我应该解码的 json 的名称是什么,或者它是从 roblox 发送的单个值? 默认情况下,PostAsync()
发送带有标题“application/json”的数据,因此您应该能够从$_POST
变量中获取它,就像您已经在做的那样。尝试执行 var_dump($_POST)
以查看您从请求中获得的所有键和值。找到存储 json 字符串的键后,可以在其上使用 json_decode
将其转换为关联数组。
我将它添加到 PHP 脚本中,但是当我检查控制台时它只是返回空白。以上是关于如何使用 HTTP:PostAsync() 将 JSON 数据提交到我的服务器? (机器人)的主要内容,如果未能解决你的问题,请参考以下文章
我如何将(-0.143704570332567-1.2618680524722614j)转换为 sklearn fit 方法可以使用的东西?
如何在 SQL Workbench/J 中自定义 SQL 关键字