LUA Redirect http запроса

KitKatAmAm

Новичок
Автор темы
5
0
Версия MoonLoader
.027.0-preview
Помогите плиз с кодом. Если кратко - есит свой апи сервер на гугл скриптах. Я туда отправляю b64 и сервер там загружает на хостинг и возращает ссылку. На сервере - все прекрасно поучается и ссылку возращает нормально. Только на клиенте lua результат запроса не читается и возращает 302 код. Я так понимаю это перенаправление идет от гугл скриптов автоматически, как сделать чтобы получить ответ от перенаправленного запроса без нового? В текущем коде сервер возращает 405 ошибку


lua:
-- Основная функция отправки изображения
function sendImgToServer(imgData)
    if not imgData or #imgData == 0 then
        showErrorMessage("Ошибка: пустые данные изображения")
        return
    end

    local postData = {
        password = USER_TOKEN,
        action = "upload_image",
        imageBase64 = imgData
    }

    local payload = json.encode(postData)
    showTrueMessage("Отправка изображения на сервер...")

    local success, result = httpsRequestWithRedirect(API_URL, payload, 0)
    if not success then
        showErrorMessage("? Ошибка сети или сервера: " .. tostring(result))
        return
    end

    if string.find(result, "<HTML>") or string.find(result, "<!DOCTYPE") then
        showErrorMessage("Сервер вернул HTML вместо JSON. Проверьте настройки Web App.")
        showErrorMessage("Полный ответ: " .. string.sub(result, 1, 200))
        return
    end

    local ok, response = pcall(json.decode, result)
    if ok and response then
        if response.success or response.status == "success" then
            showTrueMessage("? Фото успешно загружено!")
            if response.upload_response and response.upload_response.url then
                showTrueMessage("?? URL: " .. response.upload_response.url)
            elseif response.url then
                showTrueMessage("?? URL: " .. response.url)
            end
        else
            showErrorMessage("? Ошибка загрузки: " .. (response.error or "unknown error"))
        end
    else
        showErrorMessage("? Невалидный JSON ответ: " .. string.sub(result, 1, 100))
    end
end

function httpsRequestWithRedirect(url, payload, redirectCount)
    redirectCount = redirectCount or 0
    if redirectCount > 5 then
        return false, "Слишком много редиректов"
    end

    local response_body = {}
    local res, code, headers, status = https.request{
        url = url,
        method = "POST",
        headers = {
            ["Content-Type"] = "application/json",
            ["Content-Length"] = tostring(#payload)
        },
        source = ltn12.source.string(payload),
        sink = ltn12.sink.table(response_body)
    }

    if not res then
        return false, code
    end

    if code == 301 or code == 302 then
        local location = headers.location or headers.Location
        if location then
            print("Redirect to:", location)
            return httpsRequestWithRedirect(location, payload, redirectCount + 1)
        end
    end
    return true, table.concat(response_body)
end
 

PACKET->HASH

Участник
6
27
Нужно обработать redirect как GET - Google при редиректе уже содержит JSON-ответ в финальной ссылке

Lua:
function httpsRequestWithRedirect(url, payload, redirectCount)
    redirectCount = redirectCount or 0
    if redirectCount > 5 then
        return false, "Слишком много редиректов"
    end

    local response_body = {}
    local res, code, headers = https.request{
        url = url,
        method = "POST",
        headers = {
            ["Content-Type"] = "application/json",
            ["Content-Length"] = tostring(#payload)
        },
        source = ltn12.source.string(payload),
        sink = ltn12.sink.table(response_body)
    }

    if not res then return false, code end

    if code == 302 or code == 301 then
        local location = headers.location or headers.Location
        if location then
            print("Redirect to:", location)
           
            local rb = {}
            local r2, c2 = https.request{
                url = location,
                method = "GET",
                sink = ltn12.sink.table(rb)
            }

            if not r2 then return false, c2 end
            return true, table.concat(rb)
        end
    end

    return true, table.concat(response_body)
end
 
  • Нравится
Реакции: KitKatAmAm