4

我可以从浏览器输入这个 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");

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

4

2 回答 2

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 已经回答的那样,您需要BasicAuthorization标题前添加。

于 2016-12-16T15:31:02.027 回答
3

这种授权的标头必须看起来像(维基百科):

Authorization: Basic d2lraTpwZWRpYQ==

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

http.addHeader("Authorization", "Basic dXNlcm5hbWU6cGFzc3dvcmQ=");
于 2016-12-16T15:31:01.110 回答