Roku Brightscript中POST请求请求体发送失败求助
BrightScript 发送带请求体的 POST 请求问题解决
原代码问题分析
你的代码存在几个关键问题导致请求体无法正常发送:
- 错误且重复调用
PostFromString:第一次传入的是字面量字符串"queryString"而非变量,且调用时机过早 - 请求格式不匹配:设置了
Content-Type: application/json,但构造的请求体是表单格式的键值对,服务端无法解析 - 方法调用顺序混乱:应先完成 URL、证书、请求头的配置,再设置请求体,最后发起请求
正确代码示例
以下分两种常见请求体格式给出可行代码:
1. JSON 格式请求体
如果接口要求接收 JSON 格式的请求体:
xfer = CreateObject("roURLTransfer") # 设置目标接口地址(URL 参数可直接拼接在这里,如需要) xfer.SetURL("https://d5c8-115-186-189-0.ap.ngrok.io/hello") # 配置请求方法为 POST xfer.SetRequest("POST") # 配置 HTTPS 证书(必须步骤) xfer.SetCertificatesFile("common:/certs/ca-bundle.crt") xfer.InitClientCertificates() # 设置请求头,指定 JSON 格式 xfer.AddHeader("Content-Type", "application/json") xfer.AddHeader("Test-Header", "Test Header Value") # 构造 JSON 结构的请求体 requestBody = { "title": "hello", "name": "world" } # 转换为 JSON 字符串 jsonBody = FormatJson(requestBody) # 设置请求体,仅需调用一次 xfer.PostFromString(jsonBody) # 发起请求并获取响应 rsp = xfer.GetToString() print "Rsp: " rsp # 解析响应(如果响应是 JSON 格式) if rsp <> "" then json = ParseJson(rsp) print "json: " json end if
2. 表单格式请求体
如果接口要求接收 application/x-www-form-urlencoded 格式的请求体:
xfer = CreateObject("roURLTransfer") xfer.SetURL("https://d5c8-115-186-189-0.ap.ngrok.io/hello") xfer.SetRequest("POST") xfer.SetCertificatesFile("common:/certs/ca-bundle.crt") xfer.InitClientCertificates() # 设置表单格式对应的 Content-Type xfer.AddHeader("Content-Type", "application/x-www-form-urlencoded") xfer.AddHeader("Test-Header", "Test Header Value") # 构造表单请求体,对参数值进行转义处理 title = xfer.Escape("hello") name = xfer.Escape("world") formBody = "title=" + title + "&name=" + name xfer.PostFromString(formBody) rsp = xfer.GetToString() print "Rsp: " rsp if rsp <> "" then json = ParseJson(rsp) print "json: " json end if
关键注意事项
PostFromString必须在完成所有请求配置(URL、头、证书)后调用,且仅调用一次- 请求体格式必须与
Content-Type请求头完全匹配,否则服务端无法正确解析 - HTTPS 请求必须配置证书文件,否则会出现连接失败
- URL 路径后的查询参数(如
?title=hello)与请求体是独立的,可以同时存在
内容的提问来源于stack exchange,提问作者aleem aheer
相关产品推荐
相关产品推荐

