Transport Adapters ## Business Purpose
Allow the library to use different underlying HTTP libraries or custom transport mechanisms for different URL schemes, enabling support for SOCKS proxies, custom SSL contexts, and mocking in tests. ## Current Behaviors
- BaseAdapter is an abstract class that raises NotImplementedError for send and close (src/requests/adapters.py:201-221, 634-748).
- HTTPAdapter extends BaseAdapter and provides full HTTP/HTTPS support via urllib3 src/requests/adapters.py:122.
- HTTPAdapter.__init__ initializes max_retries, config, proxy_manager, pool parameters src/requests/adapters.py:201.
- init_poolmanager creates a urllib3 PoolManager src/requests/adapters.py:239.
- proxy_manager_for returns cached ProxyManager for proxies, supports SOCKS src/requests/adapters.py:66.
- send method obtains a connection, verifies certificates, handles timeouts, and maps urllib3 exceptions to Requests exceptions src/requests/adapters.py:634.
- cert_verify configures CA certificates and client certs on the connection src/requests/adapters.py:307. ## Technical Implementation
Adapters are mounted on a Session via session.mount(prefix, adapter). The Session's send method uses get_adapter to find the matching adapter for the request URL src/requests/sessions.py:655. The adapter then performs the actual HTTP call. ## Definition of Done
- HTTPAdapter.send() returns a Response object for successful requests.
- An adapter mounted with session.mount('https://', custom_adapter) handles all HTTPS requests.
- Proxy errors, connection timeouts, and SSL errors are raised as Requests-specific exceptions (e.g., ProxyError, ConnectTimeout, SSLError).
- close() on an adapter clears its connection pool and all proxy managers.