如何在地址后使用?key = value& key = value制作正确的HTTP Post请求

时间:2017-09-17 09:36:29

标签: http lua esp8266 nodemcu

我自己做一个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)

http.Post on GMod Lua Wiki

================== 更新。我制作了自己的代码。

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连接。

1 个答案:

答案 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