web/ip opvragen - POST

Visualisatie in EIB-KNX systemen, een vak apart.
Plaats reactie
rickcn
Berichten: 22
Lid geworden op: di 04 sep 2012, 17:56

web/ip opvragen - POST

Bericht door rickcn »

Ben aan het stoeien met een weerstation van Netatmo, welke je ook makkelijk kunt aflezen met je iphone. Echter wil ik de gemeten temperatuur, luchtvochtigheid, achtergrond lawaai etc ook op mijn Gira laten zien.

Er is een hele REST interface beschikbaar, en het opvragen van informatie lukt (Http GET), zolang je de juiste access-code gebruikt. Die laatste kun je opvragen met een POST. Voorbeeld:

POST /oauth2/token HTTP/1.1
Host: api.netatmo.net
Content-Type: application/x-www-form-urlencoded;charset=UTF-8

grant_type=password
client_id=[YOUR_APP_ID]
client_secret=[YOUR_CLIENT_SECRET]
username=[USER_MAIL]
password=[USER_PASSWORD]
scope=read_station

Heeft iemand ervaring met hoe je in Gira een http POST naar een webservice kunt doen en daarna je antwoord parsen?

Alternatief zou ik een php script schrijven dat dit doet en op een webserver laten draien en met een gewone GET (dus http::/webserver/script?access_code=nieuw) de parameters als JSON terug laten komen en dan parsen. Maar wil dit vermijden.

Tips?
rickcn
Berichten: 22
Lid geworden op: di 04 sep 2012, 17:56

Re: web/ip opvragen - POST

Bericht door rickcn »

Heb nog wat verder geklust en het antwoord zelf gevonden door gebruik te maken van de debug/verbose functies in wget (Ubuntu) en curl (OSX). De output van Curl geeft namelijk voor het commando hetvolgende:

mymac: ~rick$ curl --trace-ascii - -d "grant_type=password&client_id=1234567890abcd&client_secret=myclientsecret12347890&username=first.last@mail.com&password=mypassword" "http://api.netatmo.net/oauth2/token"

0000: POST /oauth2/token HTTP/1.1
001d: User-Agent: curl/7.30.0
0036: Host: api.netatmo.net
004d: Accept: */*
005a: Content-Length: 142
006f: Content-Type: application/x-www-form-urlencoded
00a0:
=> Send data, 142 bytes (0x8e)
0000: grant_type=password&client_id=1234567890abcd&client_se
0040: cret=myclientsecret12347890&username=first.last@mail.com&pas
0080: sword=mypasswd
== Info: upload completely sent off: 142 out of 142 bytes
<= Recv header, 17 bytes (0x11)
0000: HTTP/1.1 200 OK
== Info: Server nginx/1.6.0 is not blacklisted
<= Recv header, 21 bytes (0x15)
0000: Server: nginx/1.6.0
0000: Date: Fri, 27 Jun 2014 11:22:05 GMT
0000: Content-Type: application/json
0000: Content-Length: 202
0000: Connection: keep-alive
0000: X-Powered-By: PHP/5.3.10-1ubuntu3.12
0000: Cache-Control: no-store
0000: Access-Control-Allow-Origin: *
0000:
<= Recv data, 202 bytes (0xca)
0000: {"access_token":"1234567890abcdefmytoken
0040: andtherest7890","refresh_token":"refreshtoken1234
0080: and even longer7890","scope":null,"expires_in":10800,"expire_
00c0: in":10800}

Heb daarna letterlijk de hele tekst van de POST tot mypassword in de blok text gezet van Gira Expert "Query and Evaluate Web/IP pages", en gekeken naar de output en dan gefilterd. Ging eigenlijk heel erg gemakkelijk!
Text blokken sturen
Text blokken sturen
Screen Shot 2014-06-27 at 22.45.40.png (44.6 KiB) 5375 keer bekeken
Truc is dus te kijken wat de echte HTTP calls zijn en die in de blokken te zetten.

CLOSED>
rickcn
Berichten: 22
Lid geworden op: di 04 sep 2012, 17:56

Re: web/ip opvragen - POST

Bericht door rickcn »

Nu heeft Netatmo besloten de pagina's achter https te plaatsen. De poort veranderen in de ip-call van poort 80 naar poort 443 helpt echter niet; ik krijg telkens een foutmelding 400 van de server.

Heeft iemand ervaring met het opvragen van pagina die achter https ipv http staan?

Mvg,
Rick
Plaats reactie