- Use `requests.Session()` for multiple requests to the same host — it reuses TCP connections and persists cookies/headers.
- Always check `response.raise_for_status()` after requests — it raises `HTTPError` for 4xx/5xx responses instead of silently succeeding.
- Set `timeout=(connect_timeout, read_timeout)` on every request — never use `requests.get()` without a timeout in production code.
- Use `response.raise_for_status()` to raise `HTTPError` on 4xx/5xx responses.
- Use `response.json()` for JSON parsing — handle `JSONDecodeError` for non-JSON error responses.
- Use `params` dict for query parameters, `json` dict for JSON request bodies.
- Use `requests.adapters.HTTPAdapter` with `Retry` for automatic retry on transient failures.