我正在尝试发送来自我的Arduino Mega使用以太网盾的Post请求,我已经尝试了互联网上的许多代码,但我还没有完成
我也已经在NodeMCU-ESP8266上做到了,但我不知道为什么mega变得如此棘手
从这段代码中,除了我从来没有收到POST请求之外,一切都很顺利,我正在使用这个网站'requestcatcher‘来测试POST请求
#include <Ethernet.h>
#include <SPI.h>
// Conf. mac
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Server to Post
char server[] = "http://abc.requestcatcher.com/test";
// Starting Ethernet client
EthernetClient client;
// =============== Connecting to internet =============== //
void setup() {
// Open serial communications and wait for port to open:
// wait for serial port to connect. Needed for native USB port only
Serial.begin(9600);
while (!Serial) {
;
}
// Connecting to internet
if (Ethernet.begin (mac) == 0) {
Serial.println("Can’t connect via DHCP");
}
// Give the Ethernet shield a second to initialize
delay(1000);
// Printing the IP Adress
Serial.print ("IP Address: ");
Serial.println(Ethernet.localIP());
}
/////============= Sending Post request ============= ////
void loop() {
Serial.println(" - Post request in process - ");
if (client.connect(server, 80) {
Serial.print(" Sending Post request ");
client.println("POST /test HTTP/1.1");
client.println("Host: abc.requestcatcher.com/");
client.println("Content-Type: application/x-www-form-urlencoded");
client.println("Content-Length: ");
client.println();
}
else {
Serial.println("Can’t reach the server");
}
// Wait 10 secs
delay(10000);
}
Arduino通过串行打印类似这样的东西
IP Adress: 192.168.100.40
- Post request in process -
Sending Post request
- Post request in process -
Sending Post request
- Post request in process -
Sending Post request
所以我认为这意味着Arduino成功地连接到了互联网,而且'client.connect(server,80)‘也变成了真的,因为它打印了’发送Post请求‘,但我不知道为什么请求捕获器从来没有收到任何post请求,我用在线应用程序和NodeMCU测试了'requestcatcher’,它从除了Arduino之外的所有应用程序获得了post请求,所以我认为这里一定出了什么问题:
client.println("POST /test HTTP/1.1");
client.println("Host: abc.requestcatcher.com/");
client.println("Content-Type: application/x-www-form-urlencoded");
client.println("Content-Length: ");
client.println();
请帮忙,任何提示都会很有帮助。
发布于 2018-06-04 15:50:04
您必须删除此部分代码中的;
并括号if (client.connect(server, 80); {
=> if (client.connect(server, 80)) {...}
发布于 2018-06-06 06:03:28
我检查了报头的协议,所以它最终是如何工作的
if (client.connect(server, 80)) {
Serial.print(" Sending Post request ");
client.println("POST /test HTTP/1.0");
client.println("Host: abc.requestcatcher.com");
client.println("Connection: close");
client.println("Content-Length: 0"); //------- I missed 0
client.println("Content-Type: application/x-www-form-urlencoded");
client.println(""); //------- I missed ""
Serial.println("Server response");
char c = client.read();
Serial.println(c);
client.stop();
}
太糟糕了,当requestcatcher实际发送"request caught“时,我得到的服务器响应是"⸮”。我不太确定http请求后的行,你能稍微推送一下吗?
但这也是非常重要的,我在顶部犯了一个错误,我不知道这会被算作拼写错误,但它确实是这样写的服务器必须这样写,否则服务器永远不会收到POST请求
char server[] = "abc.requestcatcher.com";
避免这样设置您的服务器
char server[] ="http://abc.requestcatcher.com/test";
char server[] ="abc.requestcatcher.com/";
https://stackoverflow.com/questions/50673535
复制相似问题