问题描述
我一直在尝试将数据从我的 arduino 发送到我的 ASP.Net 网站,并且一直成功,直到我尝试将时间戳作为 GET 请求中的变量发送.我认为它与分隔值的正斜杠有关,但是当我发送像-"这样的不同符号时,我得到了相同的结果(没有保存数据)
Hi i have been trying to send data from my arduino to my ASP.Net website and have been successful until i try to send a timestamp as a variable in the GET request. I have think it has somthing to do with the forward slash that separates the values but when i send a diffrent symbol like a "-" i get the same result (no data saved)
抱歉,它不是正斜杠!这是因为 asp.net 期望:01/01/01 01:01:01 并且我正在发送 1/1/1 1:1:1.所以我需要弄清楚如果需要,如何在前面发送零
sorry its not the forward slash! it is because asp.net expects: 01/01/01 01:01:01 and am sending 1/1/1 1:1:1. so i need to figure out how send it with the zero in front if needed
到目前为止我的代码(发送部分)
my code so far (the sending part)
void sendLightData() {
DateTime now = rtc.now();
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
// try to congifure using IP address instead of DHCP:
Ethernet.begin(mac, ip);
}
// give the Ethernet shield a second to initialize:
delay(1000);
Serial.println("connecting...");
// if you get a connection, report back via serial:
if (client.connect(server, 80)) {
Serial.println("connected");
// Make a HTTP request:
client.print("GET /LightData.aspx?uname=");
client.print(userName);
client.print("&pword=");
client.print(password);
client.print("&LStatus=");
client.print(lightStatus);
client.print("&LHeight=9&");
client.print("timestamp=");
client.print(now.day(), DEC);
client.print("/");
client.print(now.month(), DEC);
client.print("/");
client.print(now.year(), DEC);
client.print("%20");
client.print(now.hour(), DEC);
client.print(":");
client.print(now.minute(), DEC);
client.print(":");
client.print(now.second(), DEC);
client.println(" HTTP/1.1");
client.println("Host: www.auntieagie.eu");
client.println("Connection: close");
client.println();
// this works if entered into a browser (trying to replicate in arduino) http://auntieagie.eu/LightData.aspx?uname=test&pword=t&LStatus=1&LHeight=2×tamp=21/02/2014%2001:01:01
}
任何帮助或指向正确方向的点都会很棒
any help or a point in the right direction would be great
推荐答案
只对整个日期进行 URL 编码:
Just URL encode the whole date:
...
client.print("timestamp=");
client.print(URLEncode(String(now)));
...
辅助方法:
/**
* URL Encode a string.
*
* Based on http://www.icosaedro.it/apache/urlencode.c
*
*/
String URLEncode(const char* msg)
{
const char *hex = "0123456789abcdef";
String encodedMsg = "";
while (*msg!='\0'){
if( ('a' <= *msg && *msg <= 'z')
|| ('A' <= *msg && *msg <= 'Z')
|| ('0' <= *msg && *msg <= '9') ) {
encodedMsg += *msg;
} else {
encodedMsg += '%';
encodedMsg += hex[*msg >> 4];
encodedMsg += hex[*msg & 15];
}
msg++;
}
return encodedMsg;
}
这篇关于如何在 Get 请求中将时间戳从 RTC 发送到网站?使用 arduino的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!