一周前,我用我的Arduino MEGA 2560和以太网盾启动了一个新项目。我能够向我的服务器发送一个WOL,但是现在我想用JSON命令来平平我的XBMC服务器。在我的Chrome浏览器中,我可以通过响应HTTP请求检查服务器:
http://192.168.5.34/jsonrpc?request={"jsonrpc": "2.0", "id": 1, "method": "JSONRPC.Ping"}因此,我从XBMC服务器得到了一个干净的PONG:
{"id":1,"jsonrpc":"2.0","result":"pong"}现在,我尝试使用嵌入在函数中的以下代码对Arduino执行此操作:
EthernetClient client;
IPAddress server(192,168,5,34);
if (client.connect(server, 80))
{
Serial.println("Connecting to Client...");
client.print("GET /jsonrpc?request={%22jsonrpc%22:%20%222.0%22,%20%22id%22:%201,%20%22method%22:%20%22JSONRPC.Ping%22} HTTP/1.1\r\n");
client.print("Host: 192.168.5.34\r\n");
client.print("User-Agent: Mozilla/5.0\r\n");
client.print("Connection: close\r\n\r\n");
}
else
Serial.println("Client Connection Failed!");我的Arduino得到了如下回报:
HTTP/1.1 401 Unauthorized
Content-Length: 0
Connection: close
WWW-Authenticate: Basic realm=XBMC
Date: Fri, 06 Jun 2014 21:33:24 GMT我可以用我的Arduino向Google提出一个GET请求,所以由于某种原因,XBMC不接受我的GET请求。有人知道为什么吗?我使用Wireshark来嗅探服务器上的网络数据,并且在Wireshark中存在请求和返回。
是否有办法通过GET或POST登录XBMC服务器?
谢谢你们的帮助!:)
发布于 2014-06-09 18:32:27
WWW-Authenticate: Basic realm=XBMC这意味着服务器请求用户代理(在本例中为Arduino)使用基本访问身份验证进行身份验证。
添加这一行应该可以做到这一点:
client.print("Authorization: Basic xxxxxxxxxxxxxxxxxxxx\r\n");在xxxxxxxxxxxxxxxxxxxx是Base64编码的地方(更准确地说,使用了Base64的and 2045-MIME变体,但不限于76字符/行)用户名和密码。为了获得它,您可以在从浏览器发送请求时使用Wireshark捕获这个请求头,或者生成它:
username:password (例如xbmc:xbmc )输入用户名和密码。选择“编码”选项,将每行的最大字符更改为某个较大的值,例如500,然后按“转换源数据”。xbmc:xbmc,它将是eGJtYzp4Ym1j,并在标题中使用它,例如:
Client.print(“授权:基本eGJtYzp4Ym1j\r\n");您还可以使用https://github.com/adamvr/arduino-base64库进行base64编码。
它在浏览器中工作的原因是它可能已经过身份验证。
https://stackoverflow.com/questions/24091084
复制相似问题