Trädvy Permalänk
Medlem
Plats
Gävle
Registrerad
Sep 2005

Python HTTP POST

Jag har ett bash script där jag kör loopar med curl för att skicka HTTP POST kommandon. Eftersom man alltid måste vänta på svar så när man gör detta med Json (vad jag har förstått så kan man bara "muta" svaren men måste ändå vänta på att svaren från anropet kommer tillbaka)

Jag skulle därför vilja prova att göra samma sak med python. Jag har läst och provat en massa metoder med urllib men får inte till det.
Skulle någon kunna visa mig hur jag skickar följande HTTP POST med python:

curl -H "Content-Type: application/json" -X POST -d '{"Command":"Issue","User":"admin","Password":"admin","Configuration":{"Channel":"2","Status":"0","Brightness":"100","ColorMode":"1","Color":"215","WhiteTemp":"6500"}}' http://192.168.0.201:4200/atomik

Trädvy Permalänk
Inaktiv
Registrerad
Mar 2010

Enklast är väl om du startar flera instanser av ditt script, det kan du göra i bash eller phyton spelar ju ingen roll. Verkar lite onödigt overkill att skapa ett program i python för det.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Aug 2010

Något i följande stil borde fungera (har dock inte testat koden). Enligt detta svar på Stack Overflow så fungerar inte funktionen som räknar ut content-lenght i urllib2 särskilt bra.

import json import urllib2 data = json.dumps({'Command': 'Issue', 'User': 'admin', 'Password': 'admin', 'Configuration': {'Channel': '2', 'Status': '0', 'Brightness': '100', 'ColorMode': '1', 'Color': '215', 'WhiteTemp': '6500'}}) req = urllib2.Request('http://192.168.0.201:4200/atomik', data, {'Content-Type': 'application/json', 'Content-Length': len(data)}) f = urllib2.urlopen(req) response = f.read() f.close()

Kan annars tipsa om biblioteket Requests som gör det mycket smidigare att jobba med HTTP-anrop i Python.

Du får gärna citera eller nämna mig (@ToJa92) om du svarar på något jag skrivit.

Trädvy Permalänk
Moderator
Geeks Gaming
Plats
127.0.0.1
Registrerad
Jan 2012

Jag säger som ToJa92, kolla på requests det kommer göra ditt liv mycket enklare

Kom in och häng med oss på Geeks Discord!

Trädvy Permalänk
Medlem
Plats
Dalarna
Registrerad
Aug 2012

Kör med requests och libcurl istället så ska det nog funka bra i python.

AMD R5 1600 3.2 GHz | Gigabyte AX370 Gaming K3 | Corsair Vengeance LP 2x8GB 3200MHz CL16 | KFA2 GeForce GTX 960 OC | Phanteks Eclipse P400S | 1x Samsung 850 Evo 250GB 1x WD 500GB | Windows 10 Pro