На какой адрес и куда отправляется http post запрос в базовом примере

Доброго времени суток. Пробую разобраться с http запросами. Вроде как есть базовый пример для ESP8266, а именно: ESP8266HTTPClient/PostHTTPClient
Там есть строки:

//#define SERVER_IP "10.0.1.7:9080" // PC address with emulation on host
#define SERVER_IP "192.168.1.42"

и потом, вроде как указание куда должен отправляться запрос:

    // configure traged server and url
    http.begin(client, "http://" SERVER_IP "/postplain/"); //HTTP
    http.addHeader("Content-Type", "application/json");

    Serial.print("[HTTP] POST...\n");
    // start connection and send HTTP header and body
    int httpCode = http.POST("{\"hello\":\"world\"}");

Пробовал подставить адрес платы, адрес хоста, и адрес, указанный в примере, и адреса в инете, но все равно в порту пишет:

[HTTP] begin...
[HTTP] POST...
[HTTP] POST... failed, error: connection failed

Куда все таки отправляется запрос или откуда ошибка?

Зависит от других настроек
Если вы не настраивали адрес шлюза, сервер должен быть в том же сегменте сети, что и плата, иначе сигнал не пройдет

Никаких особых настроек. Подключаюсь и подсматриваю (вернее уже знаю из опыта, какой адрес дает мой роутер для платы). Этот адрес пингуется. Именно этот адрес использую, когда подставляю адрес платы

Ну и где всё это великолепие? Откуда нам знать что и как Вы там пробовали? Показывайте! Полным кодом, как положено.

Да уж, каждый раз думаю, что выложил максимум кода )))) и каждый раз не хватает ))) Хорошо, вот весь код из базового примера:

Спойлер
/**
   PostHTTPClient.ino

    Created on: 21.11.2016

*/

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

/* this can be run with an emulated server on host:
        cd esp8266-core-root-dir
        cd tests/host
        make ../../libraries/ESP8266WebServer/examples/PostServer/PostServer
        bin/PostServer/PostServer
   then put your PC's IP address in SERVER_IP below, port 9080 (instead of default 80):
*/
//#define SERVER_IP "10.0.1.7:9080" // PC address with emulation on host
#define SERVER_IP "192.168.1.42"

#ifndef STASSID
#define STASSID "your-ssid"
#define STAPSK  "your-password"
#endif

void setup() {

  Serial.begin(115200);

  Serial.println();
  Serial.println();
  Serial.println();

  WiFi.begin(STASSID, STAPSK);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected! IP address: ");
  Serial.println(WiFi.localIP());

}

void loop() {
  // wait for WiFi connection
  if ((WiFi.status() == WL_CONNECTED)) {

    WiFiClient client;
    HTTPClient http;

    Serial.print("[HTTP] begin...\n");
    // configure traged server and url
    http.begin(client, "http://" SERVER_IP "/postplain/"); //HTTP
    http.addHeader("Content-Type", "application/json");

    Serial.print("[HTTP] POST...\n");
    // start connection and send HTTP header and body
    int httpCode = http.POST("{\"hello\":\"world\"}");

    // httpCode will be negative on error
    if (httpCode > 0) {
      // HTTP header has been send and Server response header has been handled
      Serial.printf("[HTTP] POST... code: %d\n", httpCode);

      // file found at server
      if (httpCode == HTTP_CODE_OK) {
        const String& payload = http.getString();
        Serial.println("received payload:\n<<");
        Serial.println(payload);
        Serial.println(">>");
      }
    } else {
      Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str());
    }

    http.end();
  }

  delay(10000);
}

предположим, мой роутер выдает адрес 192.168.1.42 Он и прописан в примере. Он пингуется. Подставляю в двух местах:
Строка 19:

#define SERVER_IP "192.168.1.42"

Этот же адрес используется в Строке 55:

    http.begin(client, "http://" SERVER_IP "/postplain/"); //HTTP

Пробовал заходить по адресу: 192.168.1.42/postplain/ и по 192.168.1.42 там ничего не выводит в браузере и пишет ошибку в мониторе порта
Пробовал в строку 19 подставлять адрес хоста, тоесть моего компа 127.0.0.1 Тоже ничего в браузере и в мониторе порта
Пробовал в строку 19 подставить адрес из инета и тоже без результата.

вы уж определитесь, это адрес роутера или сервера? Или у вас HTTP на роутере ?

1 лайк

Сюда и коннектится. А на 192.168.1.42 должен быть запущен веб-сервер, понимающий POST

2 лайка

Это адрес платы ESP, тоесть по идее сервера.

По идее это строка 51:

    HTTPClient http;

Это клиент, а не сервер. Он отправляет запрос

    // start connection and send HTTP header and body
    int httpCode = http.POST("{\"hello\":\"world\"}");
1 лайк

Хорошо, добавил:

#include <ESP8266WebServer.h>                                           // Библиотека для управления устройством по HTTP (например из браузера)

потом перед сетапом объявил:

ESP8266WebServer serverHTTP(80);                                              // Определяем объект и порт сервера для работы с HTTP

потом в сетапе:

  serverHTTP.begin();                                                         // Инициализируем Web-сервер  

и в цикле:

    serverHTTP.handleClient();                                                // Обработчик HTTP-событий (отлавливает HTTP-запросы к устройству и обрабатывает их в соответствии с выше описанным алгоритмом)  

Теперь в браузере по адресу пишет либо:
Not found: /postplain/ либо Not found: /
В мониторе порта все так же ошибка:

[HTTP] begin...
[HTTP] POST...
[HTTP] POST... failed, error: connection failed

Или я не так добавляю вэбсервер или не то понял под сервером?

Хочешь попробовать? Нет проблем, я отписал в личку

А ответ сервера перед serverHTTP.begin(); кто настраивать будет?

вы, похоже, вообще в этом по нулям. Вам зачем вообще нужен сервер? нет никакого смысла коннектится к самому себе, то что вы вытворяете.

Похоже да, читаем литературу, в инете много

И для пробы тестирования поставьте себе на комп бесплатный apache

Для этого поднимал xampp и пробовал по адресу localhost и 127.0.0.1 смотреть
Но в целом не очень разбираюсь в этой теме. Но по идее на самой ESP тоже поднимается вэбсервер с помощью библиотек.

В esp можно сделать и сервер и клиент, вы определитесь с задачей.

И да, разобраться придётся, чтоб сдеоать нормальный проект.

1 лайк

ты озвучь, что ты хочешь…и личку проверь

Вообще ситуации бывают разные и возможно такое пригодится.
Но конкретно в этой ситуации я тупо скопировал пример, чтобы разобраться что и как работает. И получил ошибку в порту и ничего на странице в браузере, хотя по идее должно было написать: “Привет, мир”.
Ведь примеры должны быть рабочие. Ну, или я не там проверяю работоспособность

Именно так.

И нельзя пытаться научиться чему-то абстрактному, без конкретной цели. Даже штаны снимают по поводу, а не просто так.