Отправка данных в POST массив.

Тема в разделе "ESP8266, ESP32", создана пользователем dima11711, 29 дек 2019.

  1. dima11711

    dima11711 Нуб

    Здравствуйте, у меня возникла проблема, мне нужно отправить данные с сайт в POST массив, а потом считать еsp, логично выбрать для этого Ajax, но я не знаю куда в таком случае отправлять данные, какая страница является хостом или что-то подобное. В конечном итоге я хочу получать данные с страницы без перезагрузки её.
     
  2. Asper Daffy

    Asper Daffy Иксперд

    А что такое POST массив?
     
  3. dima11711

    dima11711 Нуб

    Глобальный масив, который хранит информацию при пост запросах или что-то подобное.
     
  4. DIYMan

    DIYMan Guest

    Читайте, как формируется HTTP-запрос метода POST. В интернете - очень много уже готовой инфы, в том числе и уроков, по протоколу HTTP. Про RFC по HTTP я скромно умолчу ;)
     
  5. dima11711

    dima11711 Нуб

    Проблема в том, что не понятно куда отправлять данные в ajax нужно указать страницу, а в у еsp нет страницы, и как связать POST и esp
     
  6. DIYMan

    DIYMan Guest

    Проблема в том, что у вас отсутствуют базовые знания по протоколу HTTP. URI - это не страница, это адрес, унифицированный идентификатор ресурса. Вот скажите, какая страница по адресу http://google.com ? Или - какая страница по адресу http://192.168.0.1 ? Правильный ответ - не стоит URI называть страницей.

    По поводу POST: это один из видов запроса к URI, согласно спецификации протокола HTTP. Грубо говоря - это набор символов, текст (потому что протокол - текстовый), который надо сформировать в соответствии со спецификацией протокола, в зависимости от типа кодирования данных в теле запроса, и т.д.и т.п, вроде указания необходимых заголовков запроса и пр.

    Так понятней?
     
  7. Asper Daffy

    Asper Daffy Иксперд

    Тогда понятно.
     
  8. parovoZZ

    parovoZZ Гуру

    Технология AJAX на примере малины. В ESP аналогично
    http://forum.amperka.ru/threads/cgi-ajax-и-распи-два.19766/
     
  9. dima11711

    dima11711 Нуб

  10. dima11711

    dima11711 Нуб

    Хорошо, я не сомневался , что вы правы, но ответьте на последней вопросы:
    1) Вы знаете что такое esp?
    2) Вы программировали esp?
    3) У вас есть представление, как благодаря методу POST отправить данные на esp или в json файл?
     
  11. На esp поднимается веб сервер, на сдк "из коробки", для веб сервера не требуются установки дополнительных (внешних) библиотек.
    На веб сервере определяете обработчики методов get post и т.п. В обработчиках получаете данные, которые клиенты выполняя эти методы отправляют на esp.
    Если клиент выполняя метод post отправляет данные на esp, то на esp в обработчике запроса эти данные можно получить от сервера вызвав метод server.arg("plain");
    Для работы с джейсоном используете внешнюю библиотеку (необходимо её установить). В обработчике метода post получаете джейсон от клиента и обрабатываете его как вам требуется.
    Если необходим веб-интерфейс, в обработчике метода get отгружаете клиенту необходимое содержимое.
     
  12. DIYMan

    DIYMan Guest

    1. Да
    2. Да
    3. Да

    Ещё вопросы? Я вас дал ПОЛНОСТЬЮ исчерпывающий ответ касательно того, как научиться формировать POST-запрос.
     
  13. Напрасно, imho, про rfc скромничали. Каждый раз при возникновении вопросов по протоколам, стандартам и.п. - справочники является обязательным первоисточником.
    Непонятная формулировка вопроса в первом посте у ТС, наталкивает на мысль что нет точного представления о транспортном протоколе и языке разметки страницы, скриптовом языке (javascript) и т.д.
    Какая-то каша из методов протокола и страниц разметки.
     
    DIYMan нравится это.
  14. dima11711

    dima11711 Нуб

    Спасибо
     
  15. dima11711

    dima11711 Нуб

    Если честно то не понятнее, но и на том спасибо.
     
  16. DIYMan

    DIYMan Guest

    Поймите: чтобы вы начали понимать - надо системно подойти к вопросу. В вашем случае - для начала разобраться, что такое клиент-серверная архитектура. У вас ESP - выступает в роли сервера, т.е. обрабатывает запросы от клиентов. Вам нужно послать на неё HTTP POST-запрос, из клиента, методом AJAX. Чтобы это осуществить - надо, для начала, знать URI вашего ESP для протокола HTTP. Например, если в локальной сети ESP имеет IPv4-адрес 192.168.0.10, то её URI в рамках протокола HTTP будет http://192.168.0.10. Это мы уяснили, надеюсь.

    Далее: по умолчанию протокол HTTP работает на порту 80. Это значит, что любое обращение на порт 80 определённого URI будет восприниматься сервером (в вашем случае - ESP) - как желание клиента пообщаться по протоколу HTTP. При этом сервер ждёт от вас, как расширение URI - адрес конкретного ресурса на этом URI, например, если на сервере имеются некие обработчики с именами "data" (URL будет http://192.168.0.10/data), или "index.php" (URL будет http://192.168.0.10/index.php) - то при получении правильно сформированного к URI HTTP-запроса сервер поймёт, какие данные его просят отдать.

    Далее: нам надо сформировать HTTP-запрос метода POST. Тут всё зависит от клиента: где-то это надо делать ручками, где-то, например, из JavaScript на страничке, используя jQuery, можно просто сделать что-то типа
    Код (C++):
    $.post( "test.php", { name: "John", time: "2pm" })
      .done(function( data ) {
        alert( "Data Loaded: " + data );
      });
    В общем же случае, согласно RFC на протокол HTTP, POST-запрос - это обращение на URI в виде текста, определённого формата, например:

    Код (C++):
    POST / HTTP/1.1
    Host: 192.168.0.10
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 13

    say=Hi&to=Mom
    Т.е. чтобы ручками всё это сделать, надо:
    1. Открыть соединение на нужный адрес на порт 80
    2. Сформировать запрос, согласно RFC
    3. Получить и распарсить ответ
    4. В зависимости "от" - закрыть соединение, или работать дальше.
    Как видите, чтобы вам помочь правильным ответом - недостаточно только ваших хотелок, надо иметь информацию и об окружении, которое используется: кто выступает в роли сервера, кто выступает клиентом, адресация, какие программные компоненты используются для обеспечения работы по протоколу HTTP и т.д. и т.п. А теперь перечитайте ваш стартовый пост и ответьте на вопрос: что можно на него ответить? Единственно верный ответ - это указать вам путь на чтение документации.

    З.Ы. И это ещё я не упомянул про кроссплатформенные запросы, CORS и вот это вот всё. Дичи и нюансов, поверьте - хватает, и порой нельзя вот просто вот так взять - и запросить данные с любой странички по AJAX - по рукам настучат и не ответят ничего.
     
    Daniil нравится это.
  17. @DIYMan,
    Вы для примера приводите запрос на джиквери, в передаваемых данных используя джейсон, в этом случае в запросе должен быть заголовок Content-Type: application/json
    А чуть ниже приводите дамп запроса с Content-Type: application/x-www-form-urlencoded, который используется по умолчанию для формы.
    Это может запутать TC, а страшное слово CORS совсем испугает.
    Может просто начать с протокола http, без всяких ajax-ов, научиться выполнять post запросы используя подручные средства (на bash-е построили tcp сокет, соединились с esp, отправили заголовки, пустую строку и контент, затем читаем сокет пока он не закрылся).
    Пройдя этот этап, уже можно нарисовать страницы со стилями скриптами и т.п. и отгружать их с esp.
     
    DIYMan нравится это.
  18. DIYMan

    DIYMan Guest

    Так я и предлагал ТС ;)
    Злой я :)
     
  19. dima11711

    dima11711 Нуб

    Признаюсь, это моя ошибка, что я не снабдил вас достаточной информацией для ответа, просто я и не знаю, что нужно знать для отва, у меня тупик поэтому я и пришёл сюда.
    1) Роль сервера еsp уже работает Ip зависит от сети а порт 80
    2) Роль клиента обычный браузер или что именно нужно знать?
    3) коммуникация происходит в локальной сети
    Это же ajax но тут указана страница test.php получатся при отправке post запросом они придут на страницу test.php я же правильно понимаю? А мне нужно, чтобы они пришли в саму еsp то есть на сервер.
    а это как я понимаю содержимое страницы test.php?
     
  20. dima11711

    dima11711 Нуб

    Просто отправить пост запрос на страницу test.php с помощью аjax просто, а как это связать с esp у которой нет страницы test.php на которую можно отправить сложно. Может у ajax есть параметр localhost или что-то подобное?