首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Arduino发送正确的Post请求

从Arduino发送正确的Post请求
EN

Stack Overflow用户
提问于 2018-06-04 12:47:12
回答 2查看 2.4K关注 0票数 1

我正在尝试发送来自我的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(); 

请帮忙,任何提示都会很有帮助。

EN

回答 2

Stack Overflow用户

发布于 2018-06-04 15:50:04

您必须删除此部分代码中的;并括号if (client.connect(server, 80); { => if (client.connect(server, 80)) {...}

票数 0
EN

Stack Overflow用户

发布于 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/";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50673535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档