如何使用身份验证在 ESP8266 上 POST 到 RESTful API?
How to POST to a RESTful API on an ESP8266 using authentication?
我可以从浏览器输入这个 URL,在输入我的凭据后,这成功调用了我的 API http://172.16.0.40/rest/vars/set/1/12/666.
我正在尝试使用 HTTPClient 从 ESP8266 执行此操作。我的凭据是 username:password,我使用在线转换实用程序获取 dXNlcm5hbWU6cGFzc3dvcmQ=.
执行时,出现以下returns错误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");
如果我注释掉授权 header,我会得到 401,这是未经授权的访问。我做错了什么?
这种授权的header必须是这样的(Wikipedia):
Authorization: Basic d2lraTpwZWRpYQ==
简而言之,您可能只是漏掉了 "Basic" 部分。并且需要将您的代码更改为
http.addHeader("Authorization", "Basic dXNlcm5hbWU6cGFzc3dvcmQ=");
您正在尝试使用 rest/vars/set/1/12/999
作为负载向 http://172.16.0.40/
发出 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
header.
我可以从浏览器输入这个 URL,在输入我的凭据后,这成功调用了我的 API http://172.16.0.40/rest/vars/set/1/12/666.
我正在尝试使用 HTTPClient 从 ESP8266 执行此操作。我的凭据是 username:password,我使用在线转换实用程序获取 dXNlcm5hbWU6cGFzc3dvcmQ=.
执行时,出现以下returns错误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");
如果我注释掉授权 header,我会得到 401,这是未经授权的访问。我做错了什么?
这种授权的header必须是这样的(Wikipedia):
Authorization: Basic d2lraTpwZWRpYQ==
简而言之,您可能只是漏掉了 "Basic" 部分。并且需要将您的代码更改为
http.addHeader("Authorization", "Basic dXNlcm5hbWU6cGFzc3dvcmQ=");
您正在尝试使用 rest/vars/set/1/12/999
作为负载向 http://172.16.0.40/
发出 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
header.