2016-12-16 2 views
3

Je peux entrer cette URL à partir d'un navigateur, et après avoir entré mes informations d'identification cela appelle avec succès mon API http://172.16.0.40/rest/vars/set/1/12/666.Comment POST à ​​une API RESTful sur un ESP8266 en utilisant l'authentification?

J'essaye de faire ceci d'un ESP8266 using HTTPClient. Mes informations d'identification sont nom d'utilisateur: mot de passe, et j'ai utilisé un utilitaire de conversion en ligne pour obtenir dXNlcm5hbWU6cGFzc3dvcmQ =.

Lors de l'exécution, l'erreur suivante est renvoyée: (aucune idée de ce que cela signifie).

HTTPClient http; 
http.begin("172.16.0.40", 80, "/"); 
http.addHeader("Content-Type", "text/plain"); 
http.addHeader("Authorization", "dXNlcm5hbWU6cGFzc3dvcmQ="); 
auto httpCode = http.POST("rest/vars/set/1/12/999"); 

Si je commente sur l'en-tête d'autorisation, je reçois un , ce qui est tout accès non autorisé. Qu'est-ce que je fais mal?

+0

J'ai annulé votre modification, car la réponse devient incompréhensible lorsque vous ajoutez "Basic" à la suggestion d'ajouter. Si alors vous avez un autre problème, il vaut mieux poster un nouveau post à ce sujet, plutôt que de modifier le sujet de celui-ci. – mpromonet

Répondre

4

Vous essayez de faire une requête POST à ​​http://172.16.0.40/ avec rest/vars/set/1/12/999 comme charge utile.

Le code d'état HTTP 701 n'est pas un code standard et est probablement spécifique au serveur.

Vous avez probablement censé faire:

HTTPClient http; 
http.begin("172.16.0.40", 80, "/rest/vars/set/1/12/999"); 
http.addHeader("Content-Type", "text/plain"); 
http.addHeader("Authorization", "Basic dXNlcm5hbWU6cGFzc3dvcmQ="); 
auto httpCode = http.POST(payload); 

Si vous voulez une requête GET, appelez http.GET() au lieu de http.POST(payload) et vous devriez obtenir la même réponse que dans le navigateur.

Edit:
Et comme @MaximilianGerhardt déjà répondu, vous devez préfixer Basic à votre tête Authorization.

+0

Le ** GET ** a fonctionné! Par curiosité, je ne suis pas sûr de ce qu'il faut utiliser pour ** la charge utile **. – WhiskerBiscuit

+0

Le POST sert à sauvegarder des données. La charge utile serait la donnée à enregistrer. Et cela dépend de l'API. –

2

L'en-tête d'une telle autorisation doit ressembler à (Wikipedia):

Authorization: Basic d2lraTpwZWRpYQ== 

En bref, vous êtes probablement manquer la partie « Basic ». Et a besoin de faire changer votre code pour

http.addHeader("Authorization", "Basic dXNlcm5hbWU6cGFzc3dvcmQ=");