我可以从浏览器输入此网址,输入我的凭据后,这会成功调用我的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 ,这是未经授权的访问。我做错了什么?
答案 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=");