An active CleanProxies plan
Static ISP proxies for fixed US IPs, or rotating residential / mobile proxies for pools. The $4.99 trial works too.
Build a reqwest::Proxy and add it to the client: Client::builder().proxy(Proxy::all("http://HOST:PORT")?.basic_auth("USERNAME", "PASSWORD")).build()?. For SOCKS5 on static ISP proxies, enable reqwest's socks feature and use a socks5h:// URL.
reqwest is the usual HTTP client for Rust scrapers and services, async on Tokio with an optional blocking API. The proxy is set once on the Client, which also pools connections, so the main design choice is how many clients you build: one per ISP IP for stable identities, or clients without idle connections for rotation.
Static ISP proxies for fixed US IPs, or rotating residential / mobile proxies for pools. The $4.99 trial works too.
From the dashboard's proxy manager: host (or IP), port, username and password. Convert lists with the proxy list formatter.
Cargo.toml.socks feature on reqwest if you plan to use SOCKS5.Both products use the same setup in Rust reqwest. What changes is how long an IP stays with you.
A Client pools connections behind one proxy, so a client built on one ISP line always exits from the same dedicated US IP. Keep one client per account (clones share the same pool) and turn on cookie_store(true) with the cookies feature for logged-in work.
Dedicated static IPs registered to US and Canadian ISPs. The address stays the same for as long as you hold it, with unlimited bandwidth and HTTP(S) or SOCKS5 access.
A reused Client keeps connections alive, so a rotating line can return the same residential IP for several requests. Set .pool_max_idle_per_host(0) so every request opens a new connection and gets a new IP, or use a sticky line when a flow needs one IP.
Residential IPs in 190+ countries with country, state and city targeting. Rotate on every request or hold a sticky session for up to 90 minutes; GB never expire.
Every product connects over HTTP(S); static ISP and ISP subnet proxies also run SOCKS5 and IP whitelisting. This is what the dashboard gives you to paste into Rust reqwest.
IP:PORT:USER:PASSOne line per dedicated IP. With IP whitelisting on, the line is just IP:PORT and no password is sent.
HOST:PORT:USER:PASSGenerated in the proxy manager. The username carries the location and session you pick, so generate a new list to change them.
http://USERNAME:PASSWORD@HOST:PORTsocks5://USERNAME:PASSWORD@HOST:PORTUse http:// even for HTTPS websites; the TLS session still runs end to end. The socks5:// form is for static ISP and ISP subnet proxies.
Four steps, then check the exit IP with the free proxy checker.
Add reqwest (with socks if needed) and Tokio to Cargo.toml.
Call Proxy::all("http://HOST:PORT")? and chain .basic_auth("USERNAME", "PASSWORD").
Pass it to Client::builder().proxy(...), set a timeout and call .build()?.
Run cargo run; the program prints the exit IP from https://api.ipify.org.
Replace the highlighted placeholders with the values from your dashboard. Pick an example to see its code.
[dependencies]
reqwest = { version = "0.13", features = ["socks"] } # "socks" only for SOCKS5
tokio = { version = "1", features = ["full"] }use std::time::Duration;
#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
let proxy = reqwest::Proxy::all("http://HOST:PORT")?
.basic_auth("USERNAME", "PASSWORD");
let client = reqwest::Client::builder()
.proxy(proxy)
.timeout(Duration::from_secs(30))
.build()?;
let ip = client.get("https://api.ipify.org").send().await?.text().await?;
println!("exit IP: {ip}");
Ok(())
}Proxy::all covers http:// and https:// URLs; Proxy::http and Proxy::https cover one scheme each. Adding a proxy turns off reqwest's system proxy, which otherwise reads HTTP_PROXY, HTTPS_PROXY and ALL_PROXY by default; .no_proxy() turns all proxies off.SOCKS5 is available on static ISP and ISP subnet proxies: switch it on for the proxy list in your dashboard and keep the same username and password. reqwest needs the socks feature for it.
let proxy = reqwest::Proxy::all("socks5h://USERNAME:PASSWORD@HOST:PORT")?;
let client = reqwest::Client::builder().proxy(proxy).build()?;
let ip = client.get("https://api.ipify.org").send().await?.text().await?;
println!("{ip}");socks5h:// sends the hostname to the proxy, so DNS is resolved on the proxy side; socks5:// resolves it on your machine first.Export your ISP list as IP:PORT:USERNAME:PASSWORD lines into proxies.txt and build one client per line.
use reqwest::{Client, Proxy};
fn client_for(line: &str) -> reqwest::Result<Client> {
let p: Vec<&str> = line.trim().splitn(4, ':').collect();
let proxy = Proxy::all(format!("http://{}:{}", p[0], p[1]))?.basic_auth(p[2], p[3]);
Client::builder().proxy(proxy).build()
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let list = std::fs::read_to_string("proxies.txt")?;
for (i, line) in list.lines().filter(|l| !l.trim().is_empty()).enumerate() {
let client = client_for(line)?;
let ip = client.get("https://api.ipify.org").send().await?.text().await?;
println!("{i}: {ip}");
}
Ok(())
}cargo run prints the exit IP. Comment out .proxy(proxy) and run it again to compare with your own address; if both match, the proxy isn't being applied.
Open What is my IP? through the proxy to see the address and headers a website receives, or paste up to ten lines into the free proxy checker to test connectivity, latency and exit IP.
Still stuck? Our 24/7 support team answers fast: contact us with the error and the line you used (leave the password out).
.basic_auth() instead of the URL.Proxy::http, which only covers http:// URLs.Use Proxy::all (or add a Proxy::https as well).socks feature isn't enabled, or SOCKS5 isn't switched on for that ISP list.Add features = ["socks"] to reqwest and enable SOCKS5 for the list in your dashboard..pool_max_idle_per_host(0).Setup guides and best practices from the CleanProxies blog.
Setup guides for tools people run next to Rust reqwest.
http.Transport with ProxyURL for HTTP(S) and SOCKS5, env vars, keep-alive rotation and goroutines over a proxy list.
Setup guideHTTPX's proxy= argument (0.28+), SOCKS5 extras, aiohttp per-request proxies and aiohttp-socks.
Setup guideundici ProxyAgent for fetch, NODE_USE_ENV_PROXY, axios proxy config and SOCKS5 agents.
Setup guideThe -x flag, separate credentials, socks5h for remote DNS, env vars and a loop to test a whole list.
Setup guideStraight answers about running CleanProxies in Rust reqwest.
Chain basic_auth(username, password) on the Proxy, or put the credentials in the proxy URL. Both send the username and password to the proxy; basic_auth avoids URL-encoding problems.