HTTP Requests with requests
What is an HTTP request?
An HTTP request asks a server for something.
Common verbs:
GETGET: fetch dataPOSTPOST: send dataPUT/PATCHPUT/PATCH: updateDELETEDELETE: remove
GET request
get_request.py
import requests
url = "https://api.github.com"
r = requests.get(url, timeout=10)
print(r.status_code)
print(r.headers.get("content-type"))
print(r.json().keys())get_request.py
import requests
url = "https://api.github.com"
r = requests.get(url, timeout=10)
print(r.status_code)
print(r.headers.get("content-type"))
print(r.json().keys())Query parameters
params.py
import requests
url = "https://api.github.com/search/repositories"
params = {"q": "python", "sort": "stars", "per_page": 5}
r = requests.get(url, params=params, timeout=10)
r.raise_for_status()
data = r.json()
print("count:", data["total_count"])
for item in data["items"]:
print(item["full_name"], item["stargazers_count"])params.py
import requests
url = "https://api.github.com/search/repositories"
params = {"q": "python", "sort": "stars", "per_page": 5}
r = requests.get(url, params=params, timeout=10)
r.raise_for_status()
data = r.json()
print("count:", data["total_count"])
for item in data["items"]:
print(item["full_name"], item["stargazers_count"])POST JSON
post_json.py
import requests
url = "https://httpbin.org/post"
payload = {"name": "ravi", "role": "learner"}
r = requests.post(url, json=payload, timeout=10)
r.raise_for_status()
print(r.json()["json"]) # echoed backpost_json.py
import requests
url = "https://httpbin.org/post"
payload = {"name": "ravi", "role": "learner"}
r = requests.post(url, json=payload, timeout=10)
r.raise_for_status()
print(r.json()["json"]) # echoed backTimeouts and retries
Always set timeouts
Without a timeout, a request can hang forever.
Basic retry pattern
retry_pattern.py
import time
import requests
url = "https://httpbin.org/status/503"
for attempt in range(3):
try:
r = requests.get(url, timeout=5)
r.raise_for_status()
print("success")
break
except requests.RequestException as e:
print("attempt failed:", attempt + 1, e)
time.sleep(1)
else:
print("all retries failed")retry_pattern.py
import time
import requests
url = "https://httpbin.org/status/503"
for attempt in range(3):
try:
r = requests.get(url, timeout=5)
r.raise_for_status()
print("success")
break
except requests.RequestException as e:
print("attempt failed:", attempt + 1, e)
time.sleep(1)
else:
print("all retries failed")Good practice checklist
- Use
timeout=timeout= - Call
raise_for_status()raise_for_status()for non-2xx responses - Donβt log secrets (API keys)
π§ͺ Try It Yourself
Exercise 1 β GET Request
Exercise 2 β POST with JSON
Exercise 3 β Handle Timeout
If this helped you, consider buying me a coffee β
Buy me a coffeeWas this page helpful?
Let us know how we did
