使用Arduino和Azure移动服务的Http get请求
我已经将我的arduino与Azure移动服务连接起来,http post请求工作正常,我可以从传感器发送数据。但是,当使用HTTPGET请求访问表中的数据时,我将使用此数据登录,而我应该在串行窗口中获取json数据 X-cache-Lookup:网站管理员未命中:8080 这是我的Arduino上的代码。我不知道我错在哪里使用Arduino和Azure移动服务的Http get请求,azure,arduino,azure-mobile-services,ethernet,iot,Azure,Arduino,Azure Mobile Services,Ethernet,Iot,我已经将我的arduino与Azure移动服务连接起来,http post请求工作正常,我可以从传感器发送数据。但是,当使用HTTPGET请求访问表中的数据时,我将使用此数据登录,而我应该在串行窗口中获取json数据 X-cache-Lookup:网站管理员未命中:8080 这是我的Arduino上的代码。我不知道我错在哪里 #include <ArduinoJson.h> #include <SPI.h> #include <Ethernet.h> #def
#include <ArduinoJson.h>
#include <SPI.h>
#include <Ethernet.h>
#define RESPONSE_JSON_DATA_LINENNO 10
// Ethernet shield MAC address (sticker in the back)
byte mac[] = { 0xA4, 0x5D, 0x36, 0x6A, 0xE1, 0xE1 };
int qq=0;
const char* server= "avirup.azure-mobile.net";
const char* table_name= "iottest";
const char* ams_key="rkIEUqVlFrgtmqNeMmaamgUQywwMjE42";
char stat;
EthernetClient client;
char fin='0';
char buffer[64];
int charIndex=0;
StaticJsonBuffer<200> jsonbuffer;
void send_request()
{
Serial.println("\nconnecting...");
if (client.connect(server, 80)) {
Serial.print("sending ");
// GET URI
sprintf(buffer, "GET /tables/%s HTTP/1.1", table_name);
Serial.println(buffer);
client.println(buffer);
// Host header
sprintf(buffer, "Host: %s", server);
client.println(buffer);
// Azure Mobile Services application key
sprintf(buffer, "X-ZUMO-APPLICATION: %s", ams_key);
client.println(buffer);
// JSON content type
client.println("Content-Type: application/json");
//POST body
sprintf(buffer, "", "");
//Content length
client.print("Content-Length: ");
client.println(strlen(buffer));
Serial.print("Content length: ");
Serial.println(strlen(buffer));
// End of headers
client.println();
// Request body
client.println(buffer);
}
else {
Serial.
println("connection failed");
}
}
/*
** Wait for response
*/
void wait_response()
{
while (!client.available()) {
if (!client.connected()) {
return;
}
}
}
/*
** Read the response and dump to serial
*/
// Read the response and dump to serial
void read_response()
{
int jsonStringLength;
int jsonBufferCntr=0;
int numline=RESPONSE_JSON_DATA_LINENNO;
//Ignore the response except for the 10th line
while (client.available()) {
char c = client.read();
if (c == '\n')
{
numline -=1;
}
else
{
if (numline == 0 )
{
//Capture the 10th line in the response
//To do: Could be more deterministic about this:
// Expect certain content, checks and balances etc.
buffer[jsonBufferCntr++] = c;
buffer[jsonBufferCntr] = '\0';
}
}
}
Serial.println("Received:");
Serial.println(buffer);
Serial.println("");
}
/*
** Close the connection
*/
void parse()
{
//char json[] = "{\"id\":\"34CCC60D-15D2-4B53-AB8E-FF3745FDC945\",\"control\":1}";
JsonObject& root = jsonbuffer.parseObject(buffer);
if(!root.success())
{
Serial.println("PARSING FAILED!!!");
return;
}
//fin= root["control"][0];
int f= root["control"][0];
Serial.println("Decoded: ");
Serial.println(f);
}
void end_request()
{
client.stop();
}
/*
** Arduino Setup
*/
void setup()
{
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect.
}
if (Ethernet.begin(mac) == 0) {
Serial.println("ethernet failed");
for (;;) ;
}
// give the Ethernet shield a second to initialize:
delay(1000);
}
/*
** Arduino Loop
*/
void loop()
{
send_request();
wait_response();
read_response();
end_request();
delay(1000);
}
#包括
#包括
#包括
#定义响应\u JSON\u数据\u行否10
//以太网屏蔽MAC地址(背面贴纸)
字节mac[]={0xA4,0x5D,0x36,0x6A,0xE1,0xE1};
int qq=0;
const char*server=“avirup.azure mobile.net”;
const char*table_name=“iottest”;
const char*ams_key=“Rkieuqvlfrgtmqnemmamguqywwmje42”;
字符统计;
以太网络客户端;
charfin='0';
字符缓冲区[64];
int charIndex=0;
静态jsonbuffer jsonbuffer;
无效发送请求()
{
Serial.println(“\n正在连接…”);
if(客户端连接(服务器,80)){
串行打印(“发送”);
//获取URI
sprintf(缓冲区,“GET/tables/%s HTTP/1.1”,表名称);
串行打印LN(缓冲区);
client.println(缓冲区);
//主机头
sprintf(缓冲区,“主机:%s”,服务器);
client.println(缓冲区);
//Azure移动服务应用程序密钥
sprintf(缓冲区,“X-ZUMO-APPLICATION:%s”,ams_键);
client.println(缓冲区);
//JSON内容类型
println(“内容类型:application/json”);
//柱体
sprintf(缓冲区“,”);
//内容长度
client.print(“内容长度:”);
client.println(strlen(buffer));
连续打印(“内容长度:”);
Serial.println(strlen(缓冲区));
//标题末尾
client.println();
//请求主体
client.println(缓冲区);
}
否则{
电视连续剧
println(“连接失败”);
}
}
/*
**等待回应
*/
void wait_response()
{
而(!client.available()){
如果(!client.connected()){
返回;
}
}
}
/*
**读取响应并转储到串行
*/
//读取响应并转储到串行
无效读_响应()
{
int jsonStringLength;
int jsonBufferCntr=0;
int numline=RESPONSE\u JSON\u DATA\u LINENNO;
//忽略响应,第10行除外
while(client.available()){
char c=client.read();
如果(c=='\n')
{
numline-=1;
}
其他的
{
如果(numline==0)
{
//捕获响应中的第10行
//要做的事情:可能更确定:
//期望某些内容、制衡等。
缓冲区[jsonBufferCntr++]=c;
缓冲区[jsonBufferCntr]='\0';
}
}
}
Serial.println(“已收到:”);
串行打印LN(缓冲区);
Serial.println(“”);
}
/*
**关闭连接
*/
void parse()
{
//char json[]=“id\”:“34CCC60D-15D2-4B53-AB8E-FF3745FDC945\”,“control\”:1}”;
JsonObject&root=jsonbuffer.parseObject(buffer);
如果(!root.success())
{
Serial.println(“解析失败!!!”;
返回;
}
//fin=根[“控制”][0];
int f=根[“控制”][0];
Serial.println(“解码:”);
序列号println(f);
}
无效结束请求()
{
client.stop();
}
/*
**Arduino装置
*/
无效设置()
{
pinMode(13,输出);
数字写入(13,低);
Serial.begin(9600);
而(!串行){
;//等待串行端口连接。
}
if(以太网开始(mac)==0){
Serial.println(“以太网故障”);
对于(;);
}
//给以太网屏蔽一秒钟进行初始化:
延迟(1000);
}
/*
**阿杜伊诺环路
*/
void循环()
{
发送请求();
等待响应();
read_response();
结束请求();
延迟(1000);
}
如果您试图通过浏览器或curl请求访问同一url,会发生什么情况?很抱歉回复太晚。我发现这个问题是由于我的互联网服务提供商造成的。