Headers and Authentication
# Custom headers
headers = {
'Authorization': 'Bearer token123',
'Content-Type': 'application/json',
'X-Custom-Header': 'value'
}
response = requests.get('https://api.example.com', headers=headers)
# Basic Auth
response = requests.get('https://api.example.com', auth=('user', 'pass'))
# Bearer Token
headers = {'Authorization': 'Bearer mytoken123'}
response = requests.get('https://api.example.com', headers=headers)
# API Key
params = {'api_key': 'mykey123'}
response = requests.get('https://api.example.com', params=params)
Sessions
import requests
# Using session (connection pooling)
session = requests.Session()
# Set default headers
session.headers.update({'Authorization': 'Bearer token123'})
# All requests use same connection
response1 = session.get('https://api.example.com/data1')
response2 = session.get('https://api.example.com/data2')
# Session persists cookies
session.get('https://example.com/login')
# Cookies from login are reused
Timeouts
# Timeout in seconds
response = requests.get('https://api.example.com', timeout=5)
# Different timeouts for connect and read
response = requests.get('https://api.example.com', timeout=(3, 10))
# 3 seconds to connect, 10 seconds to read
# No timeout (dangerous!)
response = requests.get('https://api.example.com', timeout=None)
SSL Verification
# Disable SSL verification (not recommended for production)
response = requests.get('https://self-signed.example.com', verify=False)
# Use custom CA bundle
response = requests.get('https://api.example.com', verify='/path/to/certfile')
Streaming Downloads
# Stream large file
response = requests.get('https://example.com/large-file.zip', stream=True)
with open('file.zip', 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
# Or using Response.iter_lines()
for line in response.iter_lines():
if line:
print(line.decode('utf-8'))
Best Practices
# ✅ Always use timeout
response = requests.get(url, timeout=10)
# ✅ Check status codes
response.raise_for_status()
# ✅ Use sessions for multiple requests
session = requests.Session()
# ✅ Handle JSON properly
data = response.json()
# ✅ Use appropriate HTTP methods
# GET for reading, POST for creating, PUT for updating, DELETE for deleting
# ❌ Don't disable SSL verification in production
# ❌ Don't ignore timeouts
# ❌ Don't catch all exceptions (use specific ones)