#1 Re: Програмування Arduino » Парсинг Get запроса со стороны сервера Arduino » 2019-11-05 05:06:01

Kaka пише:
Dessan пише:

я не знаю как подключить модули String и stdio в ардуино, в стандартных библиотеках его нет.

В студии нет stdio.h ??? А если найду? Пиши #include <stdio.h> и не выпендривайся.

Ок, оно должно подсвечиваться как-то?Почему все модули красным цветом а #include <stdio.h> чёрным?Или это ни на что не влияет?

#2 Re: Програмування Arduino » Парсинг Get запроса со стороны сервера Arduino » 2019-11-05 01:24:25

Не форум, а сборище флудеров. Если не знаете как решить задачу, так и не пишите ваши крайне умные мысли ни о чём. Хорошо, что у меня есть рабочее решение через функцию и даже без цикла while (что особенно приятно).

Avazart, за код спасибо, но он не подходит. Более того, длина HTTP запроса зависит от браузера и принимающего сервера и там точно не 127 символов. Через хром можно и 2000+ передать, а вот сколько может обработать сервер arduino за раз я не знаю. Но мне вполне хватит и 500 символов для всех целей.

Моя главная проблема в том, что я не знаю как подключить модули String и stdio в ардуино, в стандартных библиотеках его нет. На западных форумах нашёл, что их качают и устанавливают. Зачем они мне нужны? Хочу понимать как они работают. Вроде что-то скачал, но они не подсвечены совсем в коде красным цветом, как остальные модули и я не знаю так должно быть или нет. К тому же я не понимаю как работают строки, почему вдруг они являются массивами и как из строки сделать цельное слово. Спросить не у кого. На форумах одни юмористы и умники.

Скачал Visual Studio - изучаю строки в С++, а там видно будет.

#3 Re: Програмування Arduino » Парсинг Get запроса со стороны сервера Arduino » 2019-11-02 23:46:52

Avazart пише:

Я делаю примерно так:

//------------------------------------------------------------------------------

Как мне объяснил народ, плохая идея забивать сначала всё что приходит в буфер а потом парсить, потому что буфер слишком маленький и если будет много данных, то всё зависнет. Нужно парсить на лету

#4 Re: Програмування Arduino » Парсинг Get запроса со стороны сервера Arduino » 2019-11-02 23:39:19

AndriyNic пише:

Я б на Вашому місці створив дві змінні username та password а тоді б парсив GET запит присвоюючи змінним знайдені результати.
Наприклад:
String answer = client.readStringUntil('\r');                   //Присвоєння зчитаних даних рядковій змінній answer
Далі у Вашому випадку:
if (answer.indexOf("username") != -1){
//Тут код для присвоєння на початку об`явленій змінній String username знайденого значення
}
if (answer.indexOf("password") != -1){
//Тут код для присвоєння на початку об`явленій змінній String password знайденого значення
}

Тут вопрос в том, что все данные могут быть разными. То есть вместо username может быть любой текст, как и вместо password

#5 Re: Програмування Arduino » Парсинг Get запроса со стороны сервера Arduino » 2019-10-19 11:47:56

А эта функция sscanf(...) разве не только для числовых значений формата int? А то у меня числа с буквами вместе стоят

#6 Re: Програмування Arduino » Парсинг Get запроса со стороны сервера Arduino » 2019-10-18 23:12:41

А это форум не для обсуждения разве? Я не знал, что тут только предлагают работу нормальным программистам. Хотя для нормального программиста тут вообще нечего делать

#7 Програмування Arduino » Парсинг Get запроса со стороны сервера Arduino » 2019-10-18 18:09:45

Dessan
відповідей: 24

Добрый день,

На сервер Arduino отправляется get запрос вида:

GET /?username=Dessan&password=12345 HTTP/1.1

Сервер Ардуино принимает запрос и выводит в порт:

GET /?username=Dessan&password=12345 HTTP/1.1
Host: 192.168.0.177:5000
Connection: keep-alive
Accept: application/json, text/javascript, */*; q=0.01
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 YaBrowser/19.9.3.314 Yowser/2.5 Safari/537.36
Origin: null
Accept-Encoding: gzip, deflate
Accept-Language: uk,ru;q=0.9,en;q=0.8

Я хочу, чтоб в результате get запроса я получал отдельно username, отдельно Dessan, отдельно password и отдельно 12345 и мог с этими данными что-то делать, например сравнивать и выполнять какое-либо действие.
Весь get запрос записывается в переменную tempChar но она имеет свой непонятный мне формат и как я не пытался сделать её строковой у меня ничего не вышло. Я создал другую строковую переменную readString и присвоил ей содержимое tempChar. Насколько я понял, строковые переменные в Arduino являются сами по себе массивами. После манипуляций с indexOf и substring мне удалось распарсить нужную мне строку, однако она выводит не полностью слово , к примеру, username а начинает вывод по буквам.
Вот код парсинга строки:

String readString;

...

while (client.connected()) {

      if (client.available()) {

        tempChar = client.read();

        

        //Serial.write(tempChar);

        if (readString.length() < 100 ) {

               readString += tempChar;

               //Serial.print(readString.length());

               ind1 = readString.indexOf("?");

               ind2 = readString.indexOf("=");

               teststring = readString.substring(ind1, ind2);

               teststring.replace("?", " ");

               teststring.trim();

...

Вот результат парсинга (значение в teststring):

u

us

use

user

usern

userna

usernam

username

username

username

username

username

username

username

и далее ещё штук 20 таких вот username

Получается , что если делать проверки содержит ли переменная username , то дальнейший код реагирует и на username и на u и на us и на use и т.д. В принципе оно работает, но хочется иметь нормальный код более менее а не совсем уже говнокод.

Підвал форуму