Lua POST请求包含垃圾信息

我正在尝试发送POST请求,但发现我要访问的端点似乎不喜欢这个请求,所以为了调查情况,我将请求重定向到 localhost ,并在使用nc监听时看到以下请求:

nc -vlp 444

连接来自 127.0.0.1:53812
POST / HTTP/1.1
主机:localhost:4444
TE: 尾部
Cookie:
内容类型: application/x-www-form-urlencoded
连接:关闭,TE
用户代理:Mozilla/5.0 (X11; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0

27 -- 这行不应该出现
username=username&password=password
0  -- 还有这个

我的代码,以防万一:


local http = require("socket.http") -- 甚至尝试了ssl.https

...

function Session:post(url, payload) -- payload = "username=username&password=password"
    local response = Response
    local body = { }
    local r, c, h, s = http.request{
        url = url,
        method = "POST",
        sink = ltn12.sink.table(body),
        source = ltn12.source.string(payload),
        headers = {
            ["用户代理"] = "Mozilla/5.0 (X11; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0",
            ["内容类型"] = "application/x-www-form"
        },
    }
    -- 这部分可以忽略
    response.code    = c
    response.status  = s
    response.body    = table.concat(body)
    self.cookies:parse(h["set-cookie"])
    return response
end

认为这是ltn12的问题,我复制了它的源代码直接放进了我的项目中,但很快就发现它只返回了有效载荷,而没有实际改变任何东西

BLOCKSIZE = 2048
function generate_payload(s)
    if s then
        local i = 1
        return function()
            local chunk = string.sub(s, i, i+BLOCKSIZE-1)
            i = i + BLOCKSIZE
            if chunk ~= "" then return chunk
            else return nil end
        end
    else return source.empty() end
end
点赞
用户88888888
用户88888888

通过添加 Content-Length 标头成功解决了问题。

2019-06-22 15:53:06