【问题标题】:lua: http post dynamiclua:http post动态
【发布时间】:2020-07-03 07:04:21
【问题描述】:

我正在尝试使用 Lua 编程语言来使用 Web 服务。当我运行我的脚本时,我收到一个 http 错误 500。我的 API 是用 Python Flask 编写的,这是我的 Lua 脚本。

http = require("socket.http");
ltn12 = require("ltn12");
param_1 = argv[1];
param_2 = argv[2];
path = "http://www.url.com:8080/api/"
body = [[ {"number_id":"b8ce37fb-2061-4aea-975b-57a8e2d355ce","caller_number":param_1,"called_number":param_2} ]]
response_body = { }
res, code, response_headers, status = http.request
{
    url = path,
    method = "POST",
    headers =
    {
          ["X-Access-Key"] = "xxxxxxxxxxxxx",
          ["Content-Type"] = "application/json",
          ["Content-Length"] = body:len()
    },
    source = ltn12.source.string(body),
}

我收到了以下python回溯:

Expecting value: line 1 column 70 (char 69)(185.22                                                                                                             2.62.80)
Traceback (most recent call last):
File "/root/TVS/tokens-via-sva/app/controllers/api/codes.py", line 31, in crea                                                                                                             te_code
    data = json.loads(request.data)
File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
     return _default_decoder.decode(s)
File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
     obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode
     raise JSONDecodeError("Expecting value", s, err.value) from None
    json.decoder.JSONDecodeError: Expecting value: line 1 column 70 (char 69)

问题的根源是什么?

【问题讨论】:

  • 可能是请求返回了无效的 JSON,python 崩溃了。你能在调用json.loads之前显示request.data吗?
  • 我收到了这个b' {"number_id":"b8ce37fb-2061-4aea-975b-57a8e2d355ce","caller_number":caller_id_number,"called_number":caller_destination} '
  • 什么是caller_id_number?您在此处发布时是否用此字符串替换了实际数据?还是 JSON 与您给出的字符串完全匹配?
  • 其实我弄错了,我在后台得到的结果是{"number_id":"b8ce37fb-2061-4aea-975b-57a8e2d355ce","caller_number":param_1,"called_number":param_2} '
  • 你应该在字符串body = [[ .... ]]而不是变量名中插入真实数据。例如,将:param_1, 替换为:"]]..param_1..[[",

标签: python http lua http-post


【解决方案1】:

Lua 不支持非常常见的格式来制作 http 正文。 lua 中的具体格式是在字符串 body = [[ .... ]] 中插入真实数据,而不是变量名。 在这种情况下:

body = [[ {"number_id":"b8ce37fb-2061-4aea-975b-57a8e2d355ce","caller_number":"]]..param_1..[[","called_number":"]]..param_2..[["} ]];

【讨论】:

    猜你喜欢
    • 2019-05-14
    • 2013-04-29
    • 2023-03-20
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多