如何使用身份验证在ESP8266上发布到RESTful API?

Whi*_*uit 4 http-post esp8266 arduino-esp8266

我可以从浏览器输入此URL,输入凭据后,它会成功调用我的API http://172.16.0.40/rest/vars/set/1/12/666

我正在尝试使用HTTPClient从ESP8266进行此操作。我的凭据是username:password,我使用了一个在线转换实用程序来获取dXNlcm5hbWU6cGFzc3dvcmQ =

当执行时,以下返回错误701(不知道那是什么)。

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");
Run Code Online (Sandbox Code Playgroud)

如果我注释掉Authorization标头,则会得到401,这是未经授权的访问。我究竟做错了什么?

gre*_*gor 6

您正在尝试http://172.16.0.40/使用rest/vars/set/1/12/999payload作为POST请求。

HTTP状态代码701不是标准代码,并且可能是服务器特定的。

您可能打算这样做:

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);
Run Code Online (Sandbox Code Playgroud)

如果要GET请求,请调用,http.GET()而不是,http.POST(payload)并且应该获得与浏览器内部相同的响应。

编辑:
并且@MaximilianGerhardt已经回答,您需要BasicAuthorization标题之前添加。