Requests
The de-facto standard synchronous Python HTTP library offering a simple, human-friendly API for making web requests.
Score Breakdown
⚙ Agent Friendliness
🔒 Security
TLS verified by default; verify=False is a common misconfiguration risk. Credentials passed as URL components will appear in logs — always use headers or auth objects.
⚡ Reliability
Best When
You are writing simple synchronous scripts or agents where async complexity is not warranted and maximum ecosystem compatibility matters.
Avoid When
Your agent runs inside an asyncio event loop — blocking requests calls will stall the entire loop.
Use Cases
- • Calling REST APIs from synchronous agent steps without async event loop overhead
- • Reusing a Session object for connection pooling and shared headers across multiple requests
- • Downloading large files with stream=True to avoid loading the entire body into memory
- • Preparing and inspecting a PreparedRequest before sending for debugging or signing
- • Uploading multipart form data or binary payloads to external services
Not For
- • Concurrent or async workloads where asyncio is already in use (use httpx or aiohttp instead)
- • HTTP/2 connections (requests does not support HTTP/2)
- • WebSocket communication (use websockets or aiohttp instead)
Interface
Authentication
Library — auth is implemented by the application via HTTPBasicAuth, HTTPDigestAuth, custom AuthBase subclasses, or Authorization headers.
Pricing
Apache 2.0-licensed open source project maintained by the PSF.
Agent Metadata
Known Gotchas
- ⚠ No async support — calling requests inside asyncio.run() or an async agent framework blocks the event loop entirely
- ⚠ verify=False silently disables TLS certificate verification; easy to leave in place after debugging and creates a serious security vulnerability
- ⚠ Session objects are not thread-safe for concurrent use; agents running threaded workers must create one Session per thread
- ⚠ raise_for_status() must be called explicitly — a 4xx/5xx response does not raise by default, so agents can silently process error responses as success
- ⚠ Streaming responses (stream=True) must have their content consumed or the connection will not be released back to the pool, causing pool exhaustion
Alternatives
Full Evaluation Report
Detailed scoring breakdown, competitive positioning, security analysis, and improvement recommendations for Requests.
Scores are editorial opinions as of 2026-03-06.