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

时间:2016-12-16 14:56:24

标签: http-post esp8266 arduino-esp8266

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

我正在尝试使用HTTPClient从ESP8266进行此操作。我的凭据是用户名:密码,我使用在线转化实用程序获取 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");

如果我注释掉授权标题,我会收到 401 ,这是未经授权的访问。我做错了什么?

2 个答案:

答案 0 :(得分:6)

您正尝试以http://172.16.0.40/作为有效负载向rest/vars/set/1/12/999发送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);

如果您需要GET请求,请拨打http.GET()而不是http.POST(payload),您应该得到与浏览器内部相同的响应。

修改
正如@MaximilianGerhardt已经回答的那样,您需要在Basic标题前加上Authorization

答案 1 :(得分:3)

此类授权的标题必须如下(Wikipedia):

Authorization: Basic d2lraTpwZWRpYQ==

简而言之,您可能只是错过了“基本”部分。并且需要将代码更改为

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