英特尔Galileo Azure REST调用

时间:2017-07-02 10:11:44

标签: rest azure arduino httpclient intel-galileo

我正在尝试使用我的英特尔Galileo Gen2,通过调用Azure中托管的微软web api(REST服务)作为Web应用程序 但我得到的是一个天蓝色的404,说它找不到我的应用程序

我的arduino上的代码如下

A.B

我尝试多次更改目标网址

np.polyfit

它们都不起作用,有些甚至没有连接 但是它只返回404,即使该URL有效并且在不同的应用程序中进行测试,即使在同一网络上也是如此。

我已经使用设备的地址替换了mac地址,之前已经确认可以通过将其作为网络服务器本身在网络中访问它。基本上它可以抓取互联网设置但由于某种原因不会连接到我的休息服务。任何形式的帮助表示赞赏。 THX

2 个答案:

答案 0 :(得分:1)

问题是没有为呼叫提供主机。我来自c#背景,想通过使用服务器地址初始化HttpClient就够了,但显然你必须提供这一行

client.println("GET /api/warning HTTP/1.1");
client.println("Host: wack.azurewebsites.net");
client.println("User-Agent: Intel Galileo");
client.println("Connection: close\r\n");
每次提出请求时

答案 1 :(得分:0)

您错过了Host标题。

https://github.com/ircmaxell/password_compat,你必须随每个请求发送它。

您还应该发送User-AgentConnection: close成为优秀的HTTP公民。后者告诉网络服务器"不要让套接字保持打开状态,因为我会立即挂断"。 HTTP / 1.1默认为Host header is mandated by HTTP/1.1 protocol specification

将您的请求修改为:

client.println("GET /api/warning HTTP/1.1");
client.println("Host: wack.azurewebsites.net");
client.println("User-Agent: Intel Fakelileo");
client.println("Connection: close\r\n");

一个简单的测试:

$ telnet {sitename}.azurewebsites.net 80                              

Connected to waws-prod-am2-119.cloudapp.net.
Escape character is '^]'.
GET / HTTP/1.1
Host: {sitename}.azurewebsites.net
User-agent: Intel Fakelileo
Connection: close


HTTP/1.1 200 OK
Content-Length: 84
Content-Type: text/plain; charset=utf-8
Server: Microsoft-IIS/8.0
...