[löst] Python - syntax för requests.post

Permalänk
Medlem

[löst] Python - syntax för requests.post

Från DENNA tråd använder jag mig av ntfy.sh och jag har en rad med

requests.post("https://ntfy.sh/xxxxtemp",data=temperature_b

Fungerar bra men nu vill jag i samma meddelande skicka en variabel till - humidity

Jag har för dåligt tålamod att söka och testa men jag har kommit så långt att om jag skriver

requests.post("https://ntfy.sh/xxxxtemp",data={'Temp':temperature_b, 'Fukt':humidity})

så resulterar det i ex.
Temp=20.1&Fukt=37.7
: ger alltså = och det kan vara okej men jag vill inte att , ska ge &

Det jag testat hittills ger bara diverse fel.
Jag skulle vilja att det som skickas ger
20.1 °C 37.7 %

Hur ska raden se ut då?

Visa signatur

Linux Mint 21.1 Vera Cinnamon @Mintbox Mini 2 Pro

Permalänk
Medlem
Skrivet av Mikael63:

Från DENNA tråd använder jag mig av ntfy.sh och jag har en rad med

requests.post("https://ntfy.sh/xxxxtemp",data=temperature_b

Fungerar bra men nu vill jag i samma meddelande skicka en variabel till - humidity

Jag har för dåligt tålamod att söka och testa men jag har kommit så långt att om jag skriver

requests.post("https://ntfy.sh/xxxxtemp",data={'Temp':temperature_b, 'Fukt':humidity})

så resulterar det i ex.
Temp=20.1&Fukt=37.7
: ger alltså = och det kan vara okej men jag vill inte att , ska ge &

Det jag testat hittills ger bara diverse fel.
Jag skulle vilja att det som skickas ger
20.1 °C 37.7 %

Hur ska raden se ut då?

I så fall får du göra en sträng av det hela. Eller så ser du till att parsa din input. Enklast är om du använder json= istället för data= och använder dig av json helt enkelt.

Permalänk
Hedersmedlem

Den syntax som ges (x=a&y=b) har inget med Python att göra, det är hur flera variabler skickas i POST med HTTP.

Du kan antagligen göra såhär:
https://stackoverflow.com/questions/12385179/how-to-send-a-mu...

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
Mobil: Moto G200

Permalänk
Medlem
Skrivet av Mikael63:

Från DENNA tråd använder jag mig av ntfy.sh och jag har en rad med

requests.post("https://ntfy.sh/xxxxtemp",data=temperature_b

Fungerar bra men nu vill jag i samma meddelande skicka en variabel till - humidity

Jag har för dåligt tålamod att söka och testa men jag har kommit så långt att om jag skriver

requests.post("https://ntfy.sh/xxxxtemp",data={'Temp':temperature_b, 'Fukt':humidity})

så resulterar det i ex.
Temp=20.1&Fukt=37.7
: ger alltså = och det kan vara okej men jag vill inte att , ska ge &

Det jag testat hittills ger bara diverse fel.
Jag skulle vilja att det som skickas ger
20.1 °C 37.7 %

Hur ska raden se ut då?

Det där är att du skickar värdena i formatet www-form-urlencoded (samma format som ett formulär på en webbsida normalt postas i), och om man använder det formatet så ska det se ut precis sådär.

Vad vill du ska hända? Om du vill skicka json så är det smidiga sättet att lägga datan i parametern json:

requests.post(url, json=payload)

Då formateras värdena som json samt rätt content type sätts.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem

Asså om det ska resultera i ett push-meddelande utan några steg mellan så måste du väl formatera en sträng direkt i koden, och inte skicka som JSON.

Permalänk
Medlem
Skrivet av dlq84:

I så fall får du göra en sträng av det hela. Eller så ser du till att parsa din input. Enklast är om du använder json= istället för data= och använder dig av json helt enkelt.

Jag fick slå ihop de båda värdena på annat ställe.
Raden blev då

requests.post("https://ntfy.sh/xxxxtemp",data=result)

Result är

result = "Temp " + str(temperature_b) + " grader Fukt " + str(fukt)

Om jag byter ut grader mot °C skickas det inte i klartext utan jag får då en fil i stället.
Ändrar jag till

requests.post("https://ntfy.sh/xxxxtemp",data=result.encode(encoding='utf-8'))

får jag som jag ville ha det!

Visa signatur

Linux Mint 21.1 Vera Cinnamon @Mintbox Mini 2 Pro

Permalänk
Medlem

resp = requests.post(url, json=payload).json() print(resp['Temp'])

Visa signatur

AMD 7800X3D | ASUS TUF X670E-PLUS | Corsair Vengeance DDR5 32GB EXPO | ASUS TUF 4090 OC 24GB |
Noctua NH-U12A | Corsair 4000D | Corsair AX1200W | Steelseries Apex 7 | Steelseries Sensei Ten | ASUS VG35VQ

https://github.com/Mariusz89B

Permalänk
Medlem
Skrivet av Mikael63:

Jag fick slå ihop de båda värdena på annat ställe.
Raden blev då

requests.post("https://ntfy.sh/xxxxtemp",data=result)

Result är

result = "Temp " + str(temperature_b) + " grader Fukt " + str(fukt)

Om jag byter ut grader mot °C skickas det inte i klartext utan jag får då en fil i stället.
Ändrar jag till

requests.post("https://ntfy.sh/xxxxtemp",data=result.encode(encoding='utf-8'))

får jag som jag ville ha det!

För att göra strängen lite mer läsbar i koden så kan man också göra

>>> temp=20.1 >>> fukt=37.7 >>> f"Temperaturen är {temp} °C och fukten är {fukt} %" 'Temperaturen är 20.1 °C och fukten är 37.7 %'