---
title: "C16. Send Requests Through a Proxy"
order: 16
status: "draft"
---

To route traffic through a corporate network or a specific path, send requests via an HTTP proxy. Just pass the proxy host and port to `set_proxy()`.

## Basic usage

```cpp
httplib::Client cli("https://api.example.com");
cli.set_proxy("proxy.internal", 8080);

auto res = cli.Get("/users");
```

The request goes through the proxy. For HTTPS, the client uses the CONNECT method to tunnel through — no extra setup required.

## Proxy authentication

If the proxy itself requires authentication, use `set_proxy_basic_auth()` or `set_proxy_bearer_token_auth()`.

```cpp
cli.set_proxy("proxy.internal", 8080);
cli.set_proxy_basic_auth("user", "password");
```

```cpp
cli.set_proxy_bearer_token_auth("token");
```

If cpp-httplib is built with OpenSSL (or another TLS backend), you can also use Digest authentication for the proxy.

```cpp
cli.set_proxy_digest_auth("user", "password");
```

## Combine with end-server authentication

Proxy authentication is separate from authenticating to the end server (C05, C06). When both are needed, set both.

```cpp
cli.set_proxy("proxy.internal", 8080);
cli.set_proxy_basic_auth("proxy-user", "proxy-pass");

cli.set_bearer_token_auth("api-token"); // for the end server
```

`Proxy-Authorization` is sent to the proxy, `Authorization` to the end server.

> **Note:** cpp-httplib does not read `HTTP_PROXY` or `HTTPS_PROXY` environment variables automatically. If you want to honor them, read them in your application and pass the values to `set_proxy()`.
