Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Arduino ESP8266 SparkFun屏蔽的HTTP POST_Http_Post_Get_Arduino_Esp8266 - Fatal编程技术网

使用Arduino ESP8266 SparkFun屏蔽的HTTP POST

使用Arduino ESP8266 SparkFun屏蔽的HTTP POST,http,post,get,arduino,esp8266,Http,Post,Get,Arduino,Esp8266,我正在尝试向运行node.js的本地服务器发送POST HTTP。GET请求运行良好。使用邮递员(本地)的帖子运行良好,我没有任何防火墙。但我不能和Arduino一起跑 我使用的代码是一个简单的SparkFun客户端示例,其中我只更改了GET to POST: void clientDemo() { // To use the ESP8266 as a TCP client, use the // ESP8266Client class. First, create an object

我正在尝试向运行node.js的本地服务器发送POST HTTP。GET请求运行良好。使用邮递员(本地)的帖子运行良好,我没有任何防火墙。但我不能和Arduino一起跑

我使用的代码是一个简单的SparkFun客户端示例,其中我只更改了GET to POST:

void clientDemo() {
  // To use the ESP8266 as a TCP client, use the 
  // ESP8266Client class. First, create an object:
  ESP8266Client client;

  // ESP8266Client connect([server], [port]) is used to 
  // connect to a server (const char * or IPAddress) on
  // a specified port.
  // Returns: 1 on success, 2 on already connected,
  // negative on fail (-1=TIMEOUT, -3=FAIL).
  int retVal = client.connect(destServer, 5000);
  if (retVal == -1) {
    Serial.println(F("Time out"));
    return;
  } else if(retVal == -3) {
    Serial.println(F("Fail connection"));
    return;
  } else if(retVal == 1) {
    Serial.println("Connected with server!");
  }

  // print and write can be used to send data to a connected
  // client connection.
  client.print(httpPost);

  // available() will return the number of characters
  // currently in the receive buffer.
  while (client.available())
    Serial.write(client.read()); // read() gets the FIFO char

  // connected() is a boolean return value - 1 if the 
  // connection is active, 0 if it's closed.
  if (client.connected())
    client.stop(); // stop() closes a TCP connection.
}
httpPost是:

const String httpPost = "POST /meteo HTTP/1.1\n"
                        "Host: 192.168.0.131:5000\n"
                        "User-Agent: Arduino/1.0\n"
                        "Connection: close\n"
                        "Content-Type: application/x-www-form-urlencoded;\n"
                          "windspeedmph=0&winddir=0&humidity=0&temp=0&pressure=0\n";
我在串行监视器中得到的只是“与服务器连接”


我做错了什么?

标题和正文之间需要有一条空行:

常量字符串httpPost=“POST/meteo HTTP/1.1\r\n” “主机:192.168.0.131:5000\r\n” “用户代理:Arduino/1.0\r\n” “连接:关闭\r\n” “内容类型:application/x-www-form-urlencoded;\r\n” “\r\n” “风速pH=0&winddir=0&湿度=0&temp=0&pressure=0\n”; 根据标准,您应该使用
\r\n
进行换行,而不仅仅是
\n


在我的例子中,指定内容长度字段也很重要。然后应用程序开始正常工作。如果没有内容长度字段,则在接收器端看不到任何数据。内容长度指定有效负载的长度,在您的情况下是字符串的长度:“windspeedmph=0&winddir=0&湿度=0&temp=0&pressure=0\n”。

不幸的是,它没有帮助。仍然只有“与服务器连接”,仅此而已。我甚至没有在日志中看到任何帖子尝试。