如何在Lua脚本中使用lua-http发送类似curl -d的POST请求?
正确实现带请求体的POST请求(lua-http)
你的代码核心问题是两次创建了独立的请求对象:第一次设置了请求体但未发送,第二次重新创建的请求完全没带请求体就发起了调用,而且set_body()返回的是请求对象本身,并非响应的headers和stream。
下面是修正后的完整代码:
local request = require "http.request" -- 1. 创建请求对象并保存到变量 local req = request.new_from_uri("https://example.org") -- 2. 显式设置请求方法为POST(lua-http默认用GET) req.headers:upsert(":method", "POST") -- 3. 设置请求体内容 req:set_body("body text") -- 4. 发送请求并获取响应 local headers, stream = assert(req:go()) -- 处理响应结果 local body = assert(stream:get_body_as_string()) if headers:get ":status" ~= "200" then error(body) end
关键细节说明:
- 所有操作必须基于同一个请求对象,不能重复调用
new_from_uri创建新实例,否则之前设置的请求体、请求方法都会失效。 - 如果需要发送特定格式的请求体(比如JSON),可以额外添加
Content-Type头:req.headers:upsert("Content-Type", "application/json") set_body()方法会自动帮你设置Content-Length头,无需手动计算长度。
内容的提问来源于stack exchange,提问作者user17607692
相关产品推荐
相关产品推荐

