Working with APIs
The Requests Library
3 min read
The requests library makes HTTP calls simple and Pythonic. It's the foundation for interacting with web APIs.
Installation
pip install requests
Making GET Requests
import requests
# Simple GET request
response = requests.get("https://api.github.com/users/octocat")
# Check if successful
if response.status_code == 200:
data = response.json()
print(data["name"])
Making POST Requests
import requests
import json
url = "https://api.openai.com/v1/chat/completions"
headers = {
"Authorization": "Bearer sk-your-key",
"Content-Type": "application/json"
}
data = {
"model": "gpt-4",
"messages": [
{"role": "user", "content": "Hello!"}
]
}
response = requests.post(url, headers=headers, json=data)
result = response.json()
print(result["choices"][0]["message"]["content"])
Response Object
response = requests.get("https://api.example.com/data")
# Status information
response.status_code # 200
response.ok # True (if 200-299)
response.reason # "OK"
# Content
response.text # Raw text response
response.json() # Parse as JSON (returns dict)
response.content # Raw bytes
# Headers
response.headers # Response headers dict
response.headers["Content-Type"]
Handling Errors
import requests
try:
response = requests.get(url, timeout=10)
response.raise_for_status() # Raises exception for 4xx/5xx
data = response.json()
except requests.Timeout:
print("Request timed out")
except requests.HTTPError as e:
print(f"HTTP error: {e}")
except requests.RequestException as e:
print(f"Request failed: {e}")
Common Options
# Timeout (important for reliability)
response = requests.get(url, timeout=30)
# Query parameters
response = requests.get(url, params={"page": 1, "limit": 10})
# Results in: url?page=1&limit=10
# Custom headers
response = requests.get(url, headers={"User-Agent": "MyApp/1.0"})
# JSON body (automatically serializes)
response = requests.post(url, json={"key": "value"})
Practical AI Example
import requests
import os
def chat_completion(prompt, model="gpt-4"):
"""Make a chat completion request to OpenAI."""
url = "https://api.openai.com/v1/chat/completions"
headers = {
"Authorization": f"Bearer {os.getenv('OPENAI_API_KEY')}",
"Content-Type": "application/json"
}
data = {
"model": model,
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.7
}
response = requests.post(url, headers=headers, json=data, timeout=60)
response.raise_for_status()
return response.json()["choices"][0]["message"]["content"]
# Usage
answer = chat_completion("What is Python?")
print(answer)
Next, we'll learn about proper API authentication patterns. :::