2017-09-17 2 views
-3

J'ai un problème avec la création d'une requête http.post(). Je souhaite effectuer des requêtes d'API sur NodeMCU basé sur ESP8266 avec le langage Lua. Le premier problème que j'ai rencontré était "HTTP simple sur l'adresse HTTPS". Pour l'instant il est dit "mauvais jeton", donc, cela signifie qu'il n'a pas reçu mes paramètres de publication.Comment faire une requête HTTP Post correcte avec? Key = valeur & key = valeur après l'adresse

Comment cela doit-il être correct?

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) 

Habituellement j'utilise GMod Lua pour faire des demandes. Code, il sera facile:

http.Post("https://www.2level.1level/api.php",{token=mytokenhere,arg1=argumentforrequest},function(txt) end,function(txt) end) 

http.Post on GMod Lua Wiki

================== mise à jour. J'ai fait mon propre code.

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 

Mais maintenant j'ai nouveau problème: demande de certaines API uniquement connexion HTTPs.

+0

Ce type de contenu n'est pas texte/brut. –

+0

Est-ce que cela peut être considéré comme résolu? –

Répondre

0

Vous ne nous avez pas donné une URL à vérifier (ce serait difficile à cause du jeton, je sais). Ainsi, le bon code non testé serait comme ceci:

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) 

Assurez-vous que votre {token=mytokenhere,arg1=argumentforrequest} est JSON valide en vérifiant avec par exemple jsonlint.com.

Si vous rencontrez des problèmes avec HTTPS, cela peut être https://github.com/nodemcu/nodemcu-firmware/issues/1707.

+0

Votre solution n'a pas fonctionné. {"status": "NO", "message": "bad token"} - Cela signifie que le site n'a reçu aucun argument. Je résous le problème en me donnant la commande – Spar

+0

"en me donnant la commande" - qu'est-ce que cela signifie? L'exactitude de mon code peut facilement être vérifiée en l'exécutant sur http://httpbin.org/post. –

+0

Je mets à jour la question – Spar