# `HTTPower.Adapter.Req`
[🔗](https://github.com/mdepolli/httpower/blob/v0.22.0/lib/httpower/adapter/req.ex#L2)

Req adapter for HTTPower.

This adapter uses the Req HTTP client library to make HTTP requests. Req is a
"batteries-included" HTTP client with features like automatic body encoding/decoding,
compression, and more.

## Features

- Automatic JSON encoding/decoding
- Response body decompression (gzip, brotli, zstd)
- SSL/TLS support with configurable verification
- Proxy support (system or custom)
- Integration with `Req.Test` for testing

## Configuration

The Req adapter accepts standard HTTPower options plus any Req-specific options:

- `timeout` - Request timeout in seconds (converted to milliseconds for Req)
- `ssl_verify` - Enable SSL verification (default: true)
- `proxy` - Proxy configuration (`:system`, `nil`, or custom options)
- `plug` - Req.Test plug for testing (e.g., `{Req.Test, MyApp}`)

## Testing

The Req adapter works seamlessly with `Req.Test` for mocking HTTP requests in tests:

    # In your test
    Req.Test.stub(MyApp, fn conn ->
      Req.Test.json(conn, %{status: "success"})
    end)

    HTTPower.get("https://api.example.com",
      adapter: HTTPower.Adapter.Req,
      plug: {Req.Test, MyApp})

## Important

This adapter **disables Req's built-in retry logic** by setting `retry: false`.
HTTPower's own retry logic (with exponential backoff and jitter) is used instead,
ensuring consistent retry behavior across all adapters.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
