You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:10:25