如何使用 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 方法可以使用的东西?

如何通过 Maven 将“-J”选项传递给 javac?

如何使用OpenCV将白色像素设置为透明

如何在 SQL Workbench/J 中自定义 SQL 关键字

如何在 MIPS 架构中不使用 J-Type 指令保存程序计数器地址

如何使用 loc[i,j] 根据索引值访问数据框中的特定值