Ce face requests.post()
requests.post() trimite date spre server, de exemplu o comandă nouă către un API. Cu json=dicționar, requests transformă dicționarul în JSON și pune antetul Content-Type: application/json. Cu data=dicționar, datele pleacă codificate ca un formular HTML (application/x-www-form-urlencoded).
Pentru fișiere folosești files={"factura": open("factura.pdf", "rb")}. Răspunsul se citește la fel ca la get(): status_code (la creare, multe API-uri răspund cu 201), json(), headers. Există și requests.put(), patch() și delete(), cu aceiași parametri.
Parametri
| Parametru | Descriere |
|---|---|
json |
Obiect Python trimis ca JSON. |
data |
Dicționar trimis ca formular, sau text/bytes trimise așa cum sunt. |
files |
Dicționar cu fișiere de încărcat (multipart/form-data). |
headers |
Antete în plus, de exemplu un token: {"Authorization": "Bearer ..."}. |
timeout |
Secunde de așteptare. |
Ce returnează
Un obiect requests.Response.
Exemple
Exemplul 1: JSON spre un API și date de formular
httpbin.org/post trimite înapoi datele primite: câmpul json pentru prima cerere și form pentru a doua.
import requests
comanda = {"client": "Ana Popescu", "produs": "laptop", "pret": 3499.99}
r = requests.post("https://httpbin.org/post", json=comanda, timeout=10)
print(r.status_code)
raspuns = r.json()
print(raspuns["json"])
print(raspuns["headers"]["Content-Type"])
r = requests.post("https://httpbin.org/post", data={"nume": "Mihai", "oras": "Cluj"}, timeout=10)
print(r.json()["form"])
Rezultat posibil (diferă la fiecare rulare)
200
{'client': 'Ana Popescu', 'pret': 3499.99, 'produs': 'laptop'}
application/json
{'nume': 'Mihai', 'oras': 'Cluj'}
Exemplul 2: Cerere cu token de autentificare
Tokenul se citește dintr-o variabilă de mediu, nu se scrie în cod.
import os
import requests
token = os.environ["MAGAZIN_TOKEN"]
r = requests.post(
"https://api.magazin-exemplu.ro/v1/comenzi",
json={"produs": "mouse", "cantitate": 2},
headers={"Authorization": f"Bearer {token}"},
timeout=10,
)
print(r.status_code, r.json())
Rezultat posibil (diferă la fiecare rulare)
201 {'id': 1042, 'produs': 'mouse', 'cantitate': 2, 'status': 'primita'}
Greșeli frecvente
- Trimiți un dicționar cu
data=unui API care așteaptă JSON. Serverul primește un formular și răspunde cu 400 sau 415; foloseștejson=. - Scrii
json=json.dumps(comanda). Datele ajung codificate de două ori (un text JSON în interiorul JSON-ului). Dă direct dicționarul. - Pui tokenul sau parola direct în cod și apoi codul ajunge în Git. Citește-le din variabile de mediu.
Comenzi înrudite
requests.get(): Trimite o cerere HTTP GET și returnează răspunsul: cod de stare, antete, text sau JSON.raise_for_status() și timeout: Transformă răspunsurile de eroare (4xx, 5xx) în excepții și limitează cât așteaptă o cerere.json.dumps(): Transformă un dicționar, o listă sau alte valori Python în text JSON.