ассинхронный запрос на сервер

Статус
В этой теме нельзя размещать новые ответы.

nelit.dev

Участник
Автор темы
69
36
Версия MoonLoader
Другое
научите пожалуйста питониста отправлять на сервер запросы с луа. пытался отправлять таблицу без encodeJson, но на сервере ловлю код 422
"POST /api/users/create/ HTTP/1.1" 422 Unprocessable Entity

Lua:
require "lib.moonloader"

local effil = require "effil"

function asyncHttpRequest(method, url, args, resolve, reject)
   local request_thread = effil.thread(function (method, url, args)
      local requests = require 'requests'
      local result, response = pcall(requests.request, method, url, args)
      if result then
         response.json, response.xml = nil, nil
         return true, response
      else
         return false, response
      end
   end)(method, url, args)
    -- Если запрос без функций обработки ответа и ошибок.
   if not resolve then resolve = function() end end
   if not reject then reject = function() end end
    -- Проверка выполнения потока
   lua_thread.create(function()
      local runner = request_thread
      while true do
         local status, err = runner:status()
         if not err then
            if status == 'completed' then
               local result, response = runner:get()
               if result then
                  resolve(response)
               else
                  reject(response)
               end
               return
            elseif status == 'canceled' then
               return reject(status)
            end
         else
            return reject(err)
         end
         wait(0)
      end
   end)
end

function main()
   if not isSampLoaded() or not isSampfuncsLoaded() then return end
   while not isSampAvailable() do wait(100) end

   -- wait(1000)
   sampAddChatMessage("{57BB74}" .. thisScript().name .. " ver " .. thisScript().version .. " {FFFFFF}загружен. Главное меню: {57BB74}/sa", -1)

   sampRegisterChatCommand("reg", function(data)
      local username, password = string.match(data, "(%S+)%s+(%S+)")
      sampAddChatMessage("{57BB74}" .. thisScript().name .. " " .. username .. " " .. password, -1)
     
      if username ~= nil and password ~= nil then
         local data = {
            username = username,
            password = password
         }
         local json_data = encodeJson(data)
         local response = encodeJson({ body = json_data, headers = {["Content-Type"] = "application/json"}})

         sampAddChatMessage("{57BB74}" .. thisScript().name .. " запрос отправлен!", -1)
         asyncHttpRequest("POST", "http://10.10.10.10:8080/api/users/create/", response,
            function(success_response)
               print(success_response.body)
            end,
            function(error_response)
               print(error_response)
            end
         )
      else
         sampAddChatMessage("{57BB74}" .. thisScript().name .. " {FFFFFF}Используйте {57BB74}/reg [Логин] [Пароль]", -1)
      end
   end)

   while true do
      wait(0)
   end
end

на сервере написал чёто такое, но в случае отправки json таблицы даже не доходит до выполнения проверки. запрос падает сразу как сервер понимает, что не получил нужные ему данные.

Python:
@app.post("/api/users/create/")
async def create_user(data=Body()):
    print(data)

    username = data.get("username")
    password = data.get("password")

    if username and password:
        print(username)
        print(password)
        return JSONResponse({"message": "Успешно!"})
    else:
        return JSONResponse({"error": "Неверные данные"}, status_code=422)
 
Решение
этот вариант рассматриваю последним. стремлюсь к рестапи стандарту, поэтому хотелось бы отправить данные в теле запроса пост. гет запросы способны передавать данные, но только в самом юрл, так как не имеют тела
1713613461318.png

nelit.dev

Участник
Автор темы
69
36
этот вариант рассматриваю последним. стремлюсь к рестапи стандарту, поэтому хотелось бы отправить данные в теле запроса пост. гет запросы способны передавать данные, но только в самом юрл, так как не имеют тела
 

Fott

Простреленный
3,461
2,374
этот вариант рассматриваю последним. стремлюсь к рестапи стандарту, поэтому хотелось бы отправить данные в теле запроса пост. гет запросы способны передавать данные, но только в самом юрл, так как не имеют тела
1713613461318.png
 
  • Нравится
Реакции: nelit.dev
Статус
В этой теме нельзя размещать новые ответы.