Отправка надлежащего почтового запроса от Arduino - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь отправить запрос Post от моего Arduino Mega с помощью щита Ethernet, я пробовал уже много много кодов по всему Интернету, но я еще не сделал

Также сделал это уже с NodeMCU-ESP8266, но я не знаю, почему с мега так сложно

Из этого кода все идет хорошо, за исключением того, что я никогда не получаю запрос 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)»сбывается, так как он печатает «Отправка почтового запроса», но я не знаю, почему перехватчик запросов никогда не получает ни одного из почтовых запросов, я протестировал «перехватчик запросов» с онлайн-приложениями, а также с NodeMCU, и он получает запрос от всехкроме Arduino, поэтому я думаю, что здесь что-то не так:

   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(); 

Пожалуйста, помогите, любая подсказка будет очень полезна

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Я проверил протокол для заголовков, так что вот как он наконец заработал

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 фактически отправляет "запрос пойман", я не очень уверен в этомСтроки после запроса http: не могли бы вы немного подтолкнуть? ..

но также и ЭТО ОЧЕНЬ ВАЖНОопечатка, но это делает сервер должен быть написан таким образом, иначе сервер никогда не получит запрос POST

char server[] = "abc.requestcatcher.com"; 

Избегайте установки вашего сервера, как это

char server[] ="http://abc.requestcatcher.com/test";
char server[] ="abc.requestcatcher.com/";
0 голосов
/ 04 июня 2018

Вы должны удалить ; и закрыть скобку в этой части кода if (client.connect(server, 80); { => if (client.connect(server, 80)) {...}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...