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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.