Använd Pythons egna bibliotek istället för Requests
Jag har i dagarna reviderat kod som hanterar en del HTTP-anrop mot ett REST-API. Jag kom på att kunde vara en kul grej att se hur mycket läsbarhet som gick förlorad om jag fimpade requests och körde med standardbiblioteket i Python.
Enkelt exempel
Följande gör ett HTTP GET-anrop, med ett set HTTP-headers.
from urllib.request import Request, urlopen
req = Request(full_url, headers=headers)
with urlopen(req) as response:
# gör saker
Original:
import requests
response = requests.get(
url=full_url,
headers=headers
)
# gör saker
Mer avancerat exempel
Följande gör ett HTTP SEARCH-anrop och parsar svaret som ett JSON-objekt.
from urllib.request import Request, urlopen
req = Request(
f"{url}/folders",
headers=headers,
method="SEARCH"
)
with urlopen(req) as response:
data = json.loads(
response.read().decode("utf-8")
)
folders = data["data"]
Original:
import requests
folders = requests.request(
"SEARCH",
url=f"{url}/folders",
headers=headers,
).json()["data"]
Sista exemplet: Filhantering
Följande laddar hem en fil och skriver dess innehåll till disk.
from urllib.request import Request, urlopen
req = Request(
full_url, headers=headers
)
with urlopen(req) as response:
with open(
"grejor.zip", "wb"
) as f:
f.write(response.read())
Original:
import requests
resp = requests.get(
url=full_url,
headers=headers,
)
with open(f"grejor.zip", "wb") as f:
f.write(resp.content)
Slutsats
Jag är redo att fimpa requests. Läsbarheten blir något sämre, men det är inte så illa som jag befarade. Med litet träning så kommer det bli naturligt. För mer avancerade grejor så kommer jag förmodligen att använda det vidare, eller httpx om jag vill använda Pythons asynkrona styrkor, eller behöver prata HTTP/2.
Vidare läsning: