How to Convert cURL Commands to Python requests
The cURL command-line tool is ubiquitous in API documentation and debugging. However, when you need to integrate that API call into your Python application, you must convert the cURL syntax into a Python requests script. This guide covers how to map cURL flags to the requests library.
Basic GET Request
cURL:
curl https://api.example.com/users
Python:
import requests
response = requests.get('https://api.example.com/users')
print(response.json())
Adding Headers (-H)
Headers are passed using the headers dictionary in Python.
cURL:
curl -H "Authorization: Bearer my_token" \
-H "Accept: application/json" \
https://api.example.com/data
Python:
import requests
headers = {
'Authorization': 'Bearer my_token',
'Accept': 'application/json'
}
response = requests.get('https://api.example.com/data', headers=headers)
Sending JSON Data (-d / --data)
When sending JSON, use the json parameter in requests.post(). This automatically sets the Content-Type: application/json header.
cURL:
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "Alice", "role": "admin"}'
Python:
import requests
json_data = {
'name': 'Alice',
'role': 'admin'
}
response = requests.post('https://api.example.com/users', json=json_data)
Form Data and Multipart Uploads (-F)
For file uploads or form data, use the files or data parameters.
cURL:
curl -X POST https://api.example.com/upload \
-F "file=@/path/to/image.jpg" \
-F "description=Profile photo"
Python:
import requests
files = {
'file': open('/path/to/image.jpg', 'rb')
}
data = {
'description': 'Profile photo'
}
response = requests.post('https://api.example.com/upload', files=files, data=data)
Basic Authentication (-u)
cURL:
curl -u username:password https://api.example.com/protected
Python:
import requests
response = requests.get('https://api.example.com/protected', auth=('username', 'password'))
Error Handling Patterns
Always check for HTTP errors in your requests:
import requests
try:
response = requests.get('https://api.example.com/data', timeout=5)
response.raise_for_status() # Raises an HTTPError for bad responses (4xx and 5xx)
data = response.json()
except requests.exceptions.HTTPError as errh:
print(f"HTTP Error: {errh}")
except requests.exceptions.ConnectionError as errc:
print(f"Error Connecting: {errc}")
except requests.exceptions.Timeout as errt:
print(f"Timeout Error: {errt}")
except requests.exceptions.RequestException as err:
print(f"Something went wrong: {err}")
Disabling SSL Verification (-k / --insecure)
If you are testing against a local server with a self-signed certificate, you can disable SSL verification (not recommended for production).
Python:
response = requests.get('https://localhost:8443/test', verify=False)
Want to convert your commands instantly? Try our cURL to Python/JavaScript/Go Converter.