Permalänk

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

Permalänk
Inaktiv

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.

Permalänk
Medlem

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.

Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk
Hedersmedlem

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

Visa signatur

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

Permalänk
Medlem

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

Visa signatur

AMD R5 1600 3.2 GHz | Gigabyte AX370 Gaming K3 | Corsair Vengeance LP 2x8GB 3200MHz CL16 | Sapphire RX580 Nitro+ 8GB | Phanteks Eclipse P400S | 1x Samsung 970 EVO 500GB 1x WD 500GB | Windows 11 Pro