http-request PUT klappt nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
tholle
User
Beiträge: 29
Registriert: Donnerstag 7. Juli 2011, 13:51

Hi Leute,

ich wuerde gern via http-call eine Lampe schalten.
Zu Testzwecken setze auf auf der Konsole folgenden Befehl ab:

Code: Alles auswählen

curl - X PUT "http://localhost:8088/api/harmony/lights/15/state" -d "{"on" : "true"}
Das funktionert. Licht wird eingeschaltet.

Das Ganze wuerde ich gern in einem python-skript implementieren, was allerdings nicht klappt.

Code: Alles auswählen

>>> import urllib,requests
>>> requests.put('http://localhost:8088/api/loxone/lights/15/state', data = {'on':'true'})
<Response [200]>
Host wird erfolgreich kontaktiert, aber das Licht schaltet nicht. Ich nehme an, weil der "data"-Parameter nicht richtig uebertragen wird.

Hat jemand eine Idee, wie man das richtig macht.
Den Python-Request habe ich von der REQUESTS-Doku (http://docs.python-requests.org/en/mast ... -a-request)

Vielen Dank und Gruss,
tholle
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@tholle: der PUT-Request erwartet json als Payload:

Code: Alles auswählen

requests.put('http://localhost:8088/api/loxone/lights/15/state', json={'on': 'true'})
tholle
User
Beiträge: 29
Registriert: Donnerstag 7. Juli 2011, 13:51

Vielen Dank.
Klappt!

Das steht so aber nicht in der Doku.
Woher weißt du das? Erfahrung wahrscheinlich.

Gruss,
tholle
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@tholle: na, wenn der »curl«-Befehl so funktioniert, muß das mit Requests genauso gesendet werden.
tholle
User
Beiträge: 29
Registriert: Donnerstag 7. Juli 2011, 13:51

Ja, schon klar.
Aber wo ist fuer einen Anfaenger ersichtlich, dass man als Payload-Parameter "json", statt "data" nehmen muss/kann. :?

Gruss,
tholle
BlackJack

@tholle: Man muss nicht das `json`-Argument verwenden, man kann auch bei `data` JSON als Argument übergeben. Das es das `json`-Argument gibt, steht im gleichen von Dir verlinkten Quickstart-Dokument, mit Beispiel.
tholle
User
Beiträge: 29
Registriert: Donnerstag 7. Juli 2011, 13:51

@BlackJack,

das war fuer mich so nicht ersichtlich. Als Beispiele wird in Verbindung mit JSON nur die GET und POST-Methonde erwaehnt.

Aber egal, ihr habt mir auf jeden Fall schon gut weiter geholfen und ich habe wieder etwas dazu gelernt.

Vielen Dank nochmal euch beiden!

Gruss,
tholle
BlackJack

@tholle: Das ist doch wieder etwas anderes als `data` oder `json` als Argument. GET, POST, PUT & Co sind auch unabhängig von Python und `requests`, das ist HTTP, mit dem man sich beschäftigen muss.
tholle
User
Beiträge: 29
Registriert: Donnerstag 7. Juli 2011, 13:51

@Blackjack, ja, ich weiss, dass GET, POST, PUT, DELETE, etc, Teil des HTT-Protokolls sind.
Wollte nur sagen, dass ich in der REQUESTS-Doku das Argument "json" nur in Verbindung mit den HTTP-Methoden GET und POST gesehen habe, nicht mit PUT, weswegen ich gar nicht auf die Idee gekommen bin, "json" als Argument fuer meine Notwendigkeit zu nehmen.

Gruss,
tholle
Antworten