我自己做一个http.post()请求有问题。 我想在基于ESP8266和Lua语言的NodeMCU上执行API请求。 我遇到的第一个问题是" HTTPS地址上的普通HTTP"。 现在它说"坏标记",所以,这意味着他没有收到我的帖子参数。
它是如何正确的?
http.post("http://www.2level.1level/api.php","Content-Type: text/plain","token=mytokenhere&arg1=argumentforrequest",
function(code, data)
if (code < 0) then
print("HTTP request failed")
else
print(code, data)
end
end)
通常我使用GMod Lua提出请求。代码很简单:
http.Post("https://www.2level.1level/api.php",{token=mytokenhere,arg1=argumentforrequest},function(txt) end,function(txt) end)
================== 更新。我制作了自己的代码。
function ghttp.Post(url, parameters, onSuccess, onFailure, headers)
local add = ""
if parameters then
local temp = {}
for k,v in pairs(parameters) do
table.insert(temp,ghttp.encode(k).."="..ghttp.encode(v))
end
add = "?"..table.concat(temp, "&")
end
http.post(url..add,"Content-Type: application/json\r\n"..(headers or ""),"",function(code, data)
if (code < 0) then
if onFailure then onFailure() end
else
if onSuccess then onSuccess(code,data) end
end
end)
end
但现在我遇到了新问题: 某些API仅请求HTTP连接。
答案 0 :(得分:0)
你没有给我们一个验证的URL(因为令牌很难,我知道)。所以,未经测试的正确代码将是这样的:
http.post('https://www.2level.1level/api.php',
'Content-Type: application/json\r\n',
'{token=mytokenhere,arg1=argumentforrequest}',
function(code, data)
if (code < 0) then
print("HTTP request failed")
else
print(code, data)
end
end)
通过验证,例如,确保您的{token=mytokenhere,arg1=argumentforrequest}
是有效的JSON jsonlint.com。
如果您遇到HTTPS问题,那么这可能是https://github.com/nodemcu/nodemcu-firmware/issues/1707。