Как отправить HTTP-post данные в Node Express API с Arduino esp822 6?

Я отправляю данные в этот веб-API по протоколу HTTP https://morning-cliffs-85779.herokuapp.com /api/users с Arduino , подключенного к esp8226. Я использую библиотеку wificp для данных HTTP_POST.

API REST размещены в Heroku.

Когда я публикую это, Arduino дает ответ

Подключено к серверу
[WiFiEsp] Ошибка отправки пакета данных (2)
[WiFiEsp] Не удалось выполнить запись в сокет 3
[WiFiEsp] Отключение 3

и сервер Heroku дает ответ

at=error code=H13 desc="Соединение закрыто без ответа"

Ниже приведен код Arduino:

  if (client.connect(server, 80)) {
    Serial.println("Connected to server");
    // Делаем HTTP-запрос
    String content = "id=5bc58842bdfea0153bb27214&volt=7";
    client.println("POST /api/users HTTP/1.1");
    client.println("Host: morning-cliffs-85779.herokuapp.com:80");// ("Хост": хост:порт)
    client.println("Accept: */*");
    client.println("Content-Length: " + content.length());
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.println();
    client.println(content);
  }

Это Node Express API:

app.post('/api/users', function (req, res) {

console.log('here');

if (req.body.id) {
    DevReading.findByIdAndUpdate(req.body.id, {
        volt: req.body.volt
    }, function (err, reading) {
        if (err) throw err;

        res.send('Update Success');
    });
}

else {

var newDevReading = DevReading ({
    deviceName: 'test',
    volt: req.body.volt
});

newDevReading.save(function (err) {
    if (err) throw err;
    res.send('Reading Post Success');
});
}

});

, 👍1

Обсуждение

вы должны использовать SSL для подключения по https, @Juraj

как мне это сделать?, @tony mathew

см. пример WebClientSSL, @Juraj

Заголовок Host не должен содержать порт. Измените Host: Morning-cliffs-85779.herokuapp.com:80" на Host: Morning-cliffs-85779.herokuapp.com", @Gerben


1 ответ


2

Это код?

`if (client.connectSSL(server, 443)) {
Serial.println("Connected to server");
// Делаем HTTP-запрос
String PostData = content + volt;
Serial.println(PostData);
client.println("POST /api/users HTTP/1.1");
client.println("Host: morning-cliffs-85779.herokuapp.com");
client.println("Cache-Control: no-cache");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(PostData.length());
client.println();
client.println(PostData);
}`

Надеюсь, это кому-нибудь поможет

,