function _M.get_body()

in apisix/core/request.lua [274:335]


function _M.get_body(max_size, ctx)
    if max_size then
        local var = ctx and ctx.var or ngx.var
        local content_length = tonumber(var.http_content_length)
        if content_length then
            local ok, err = check_size(content_length, max_size)
            if not ok then
                
                
                
                if test_expect(var) then
                    clear_header("expect")
                end

                return nil, err
            end
        end
    end

    
    do
        local var = ctx and ctx.var or ngx.var
        local content_length = tonumber(var.http_content_length)
        if (var.server_protocol == "HTTP/2.0" or var.server_protocol == "HTTP/3.0")
            and not content_length then
            return nil, "HTTP2/HTTP3 request without a Content-Length header"
        end
    end
    req_read_body()

    local req_body = req_get_body_data()
    if req_body then
        local ok, err = check_size(#req_body, max_size)
        if not ok then
            return nil, err
        end

        return req_body
    end

    local file_name = req_get_body_file()
    if not file_name then
        return nil
    end

    log.info("attempt to read body from file: ", file_name)

    if max_size then
        local size, err = lfs.attributes (file_name, "size")
        if not size then
            return nil, err
        end

        local ok, err = check_size(size, max_size)
        if not ok then
            return nil, err
        end
    end

    local req_body, err = io.get_file(file_name)
    return req_body, err
end