Skocz do zawartości

Metody GET i POST w programowaniu ESP8266


Zealota

Pomocna odpowiedź

Tło.

Korzystając z programowania komend AT dla modułów z ESP8266 dotychczasowe, pozytywne, próby opierałem na zapytaniu GET. Chodziło o komunikację z programem KODI poprzez interfejs HTTP, który jest wbudowany w tenże. Do interfejsu można dotrzeć na kilka sposobów

1. Poprzez hiperlink w takiej postaci: 

http://127.0.0.1/jsonrpc?request={"jsonrpc":"2.0","method":"Player.GetPlayers","id":1}

2. Poprzez metodę GET, np. za pomocą komend AT komunikując się po UART z ESP8266 i przekazując string

"GET /jsonrpc?request={"jsonrpc":"2.0","method":"Player.GetPlayers","id":1} HTTP/1.1HOST: 127.0.0.1\r\n\r\n"

3. Oraz poprzez metodę POST, co nie jest ostatnim ze sposobów

"POST /jsonrpc HTTP/1.1\r\nHOST: 127.0.0.1\r\nrequest={"jsonrpc":"2.0","method":"Input.ShowOSD","id":1}\r\n\r\n"

3 sposób to na razie pierwsza próba użycia tej metody, natomiast nieudana

W pierwszych dwóch próbach dostaję to czego oczekuję, czyli taki string: 

{"id":1,"jsonrpc":"2.0","result":[{"name":"VideoPlayer","playsaudio":true,"playsvideo":true,"type":"video"},{"name":"PAPlayer","playsaudio":true,"playsvideo":false,"type":"music"}]}

Z tym, że w przypadku wysłania za pomocą komendy AT to jeszcze dostaję więcej danych, co jest również poprawne

 image.thumb.png.3f760810a824e41697b21d1316f04397.png

Natomiast 3 sposób z POST to sam "wymyśliłem" na podstawie prób i błędów, a skorzystałem z tego opisu: https://www.guru99.com/difference-get-post-http.html#6 image.thumb.png.9f08f54324b07a1dfab6b3591c67d7cd.png

Jak rozumiem należy stworzyć odpowiedni "plik" wg schematu na rysunku oraz przesłać go do serwera. Spróbowałem wygenerować to w excelu na podstawie takiego schematu image.thumb.png.4f1ebbcbc10cfd6aeb5355f9b6f12fa8.png ale dostaję błąd "parse error" image.thumb.png.b061b6ca84eca4db637672a0c42d3eb4.png

Coś ewidentnie pokręciłem, ale na "stronach www" i http nie znam się zupełnie.

Może ktoś coś podpowie.

Jest jeszcze inny sposób, przez Web Socket https://kodi.wiki/view/JSON-RPC_API#WebSocket

Wydaje się najlepszy, bo bezpośrednio po "tcp", ale czy na pewno? Jak z niego skorzystać.

 

 

  • Lubię! 1
Link do komentarza
Share on other sites

Znalazłem kolejny sposób uzyskania danych z Kodi, tym razem z konsoli Ubuntu. Niestety nadal nie mogę przerobić tego na komendę AT

curl -X POST -H "content-type:application/json" 192.168.11.17:8080/jsonrpc -d '{"jsonrpc":"2.0","method":"Player.GetPlayers","id":1}'

A oto wynik 

{"id":1,"jsonrpc":"2.0","result":[{"name":"VideoPlayer","playsaudio":true,"playsvideo":true,"type":"video"},{"name":"PAPlayer","playsaudio":true,"playsvideo":false,"type":"music"}]}

 

Link do komentarza
Share on other sites

(edytowany)

No wreszcie jest sukces. Zapytanie należy przygotować w ten sposób:

image.thumb.png.8f17f1260630b239241acf5335f254c4.png

Ważne jest wyliczenie zapytania i wypełnienie odp wartości Content-Length.

Pomocna była ta strona:

https://stackoverflow.com/questions/22077802/simple-c-example-of-doing-an-http-post-and-consuming-the-response

Edytowano przez Zealota
Nowe treści
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.