| Variable | Purpose | Format Examples |
|---|---|---|
HTTP_PROXY | HTTP traffic proxy | http://proxy:8080 |
HTTPS_PROXY | HTTPS traffic proxy | http://proxy:8080 |
ALL_PROXY | All traffic proxy | http://proxy:8080, socks5://proxy:1080 |
SOCKS_PROXY | SOCKS-specific proxy | socks5://proxy:1080 |
NO_PROXY | Bypass proxy for hosts | localhost,127.0.0.1,.local |
| Runtime/Library | HTTP_PROXY | HTTPS_PROXY | ALL_PROXY | SOCKS4 | SOCKS5 | Notes |
|---|---|---|---|---|---|---|
| Node.js (http/https) | ❌ No | ❌ No | ❌ No | ❌ No | ❌ No | Built-in modules ignore all env vars |
| Node.js + axios | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ❌ No | HTTP proxies only, needs agent for SOCKS |
| Node.js + node-fetch v2 | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ❌ No | Auto HTTP proxy support |
| Node.js + node-fetch v3 | ❌ No | ❌ No | ❌ No | ❌ No | ❌ No | Requires manual agent configuration |
| Node.js + got | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ❌ No | HTTP proxies, manual SOCKS config |
| Node.js + undici | ❌ No | ❌ No | ❌ No | ❌ No | ❌ No | Manual configuration required |
| Bun (fetch) | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ❌ No | HTTP proxies only via env vars |
| Deno (fetch) | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ❌ No | Similar to Node.js behavior |
| Library/Package | HTTP_PROXY | HTTPS_PROXY | ALL_PROXY | SOCKS4 | SOCKS5 | Notes |
|---|---|---|---|---|---|---|
| net/http (standard) | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes* | Excellent built-in support |
| resty | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes | Uses net/http underneath |
| fasthttp | ❌ No | ❌ No | ❌ No | ❌ No | ❌ No | Manual proxy configuration |
| colly | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes | Web scraping framework |
*SOCKS5 via golang.org/x/net/proxy package
| Crate | HTTP_PROXY | HTTPS_PROXY | ALL_PROXY | SOCKS4 | SOCKS5 | Notes |
|---|---|---|---|---|---|---|
| reqwest | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes | Most popular HTTP client |
| ureq | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ❌ No | Lightweight, limited SOCKS |
| surf | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ❌ No | Async HTTP client |
| isahc | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes | Uses libcurl |
| curl (rust-curl) | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | Full libcurl bindings |
| Library | HTTP_PROXY | HTTPS_PROXY | ALL_PROXY | SOCKS4 | SOCKS5 | Notes |
|---|---|---|---|---|---|---|
| cohttp | ❌ No | ❌ No | ❌ No | ❌ No | ❌ No | Manual proxy configuration |
| cohttp-lwt | ❌ No | ❌ No | ❌ No | ❌ No | ❌ No | Async version, manual config |
| curl (ocurl) | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | libcurl OCaml bindings |
| piaf | ❌ No | ❌ No | ❌ No | ❌ No | ❌ No | Modern HTTP/2 client, manual config |
| Library | HTTP_PROXY | HTTPS_PROXY | ALL_PROXY | SOCKS4 | SOCKS5 | Notes |
|---|---|---|---|---|---|---|
| requests | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ❌ No | Most popular, needs PySocks for SOCKS |
| urllib | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ❌ No | Standard library |
| aiohttp | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ❌ No | Async HTTP client |
| httpx | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes* | Modern async/sync client |
*With httpx[socks] extra
| Tool | HTTP_PROXY | HTTPS_PROXY | ALL_PROXY | SOCKS4 | SOCKS5 | Notes |
|---|---|---|---|---|---|---|
| curl | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | Universal proxy support |
| wget | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ❌ No | HTTP proxies only |
| git | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes | For HTTP(S) operations |
| Tool | HTTP | HTTPS | SOCKS4 | SOCKS5 | Environment Variables | Usage |
|---|---|---|---|---|---|---|
| proxychains/proxychains4 | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ❌ Config file | proxychains4 <command> |
| proxychains-ng | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ❌ Config file | proxychains4 <command> |
| tsocks | ❌ No | ❌ No | ✅ Yes | ✅ Yes | ❌ Config file | tsocks <command> |
| torify | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes | ❌ Tor only | torify <command> |
| redsocks | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ❌ Config file | Transparent proxy |
| torsocks | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes | ❌ Tor only | torsocks <command> |
| Tool | HTTP | HTTPS | SOCKS4 | SOCKS5 | Environment Variables | Usage |
|---|---|---|---|---|---|---|
| corkscrew | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ❌ No | corkscrew proxy port host port |
| connect | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ❌ No | connect -H proxy:port host:port |
| nc + proxy | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ❌ No | nc -X connect -x proxy:port |
| Tool | HTTP | HTTPS | SOCKS4 | SOCKS5 | Environment Variables | Usage |
|---|---|---|---|---|---|---|
| dante-client | ❌ No | ❌ No | ✅ Yes | ✅ Yes | ❌ Config file | socksify <command> |
| ss-local | ❌ No | ❌ No | ❌ No | ✅ Yes | ❌ Command args | ss-local -s server -p port |
| microsocks | ❌ No | ❌ No | ❌ No | ✅ Yes | ❌ Command args | SOCKS5 server only |
| 3proxy | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ❌ Config file | Multi-protocol proxy |
| Tool | HTTP | HTTPS | SOCKS4 | SOCKS5 | Environment Variables | Usage |
|---|---|---|---|---|---|---|
| env-proxy | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ✅ Yes | env-proxy <command> |
| with-proxy | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | with-proxy <command> |
| proxy-wrapper | ✅ Yes | ✅ Yes | ❌ No | ❌ No | ✅ Yes | proxy-wrapper <command> |
| Tool | HTTP | HTTPS | SOCKS4 | SOCKS5 | Environment Variables | Usage |
|---|---|---|---|---|---|---|
| gost | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ❌ Command args | gost -L :8080 -F socks5://proxy:1080 |
| v2ray | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ❌ Config file | v2ray -config config.json |
| xray | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ❌ Config file | xray -config config.json |
| brook | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes | ❌ Command args | brook client -s server -p password |
| Tool | Platform | HTTP | HTTPS | SOCKS4 | SOCKS5 | Environment Variables | Usage |
|---|---|---|---|---|---|---|---|
| proxifier | Windows | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ❌ GUI config | GUI application |
| proxycap | Windows | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ❌ GUI config | GUI application |
| freecap | Windows | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ❌ GUI config | GUI application |
| sockscap64 | Windows | ❌ No | ❌ No | ✅ Yes | ✅ Yes | ❌ GUI config | GUI application |
# proxychains4
sudo apt install proxychains4 # Ubuntu/Debian
brew install proxychains-ng # macOS
sudo dnf install proxychains-ng # Fedora
# tsocks
sudo apt install tsocks # Ubuntu/Debian
brew install tsocks # macOS
# torify/torsocks
sudo apt install tor torsocks # Ubuntu/Debian
brew install tor torsocks # macOS# gost
go install github.com/ginuerzh/gost/cmd/gost@latest
# v2ray
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
# brook
go install github.com/txthinking/brook/cmd/brook@latest# Configure
sudo nano /etc/proxychains4.conf
# Add: socks5 127.0.0.1 1080
# Use
proxychains4 curl http://httpbin.org/ip
proxychains4 bun test.js
proxychains4 go run main.go# Configure
sudo nano /etc/tsocks.conf
# Add: server = 127.0.0.1, server_port = 1080
# Use
tsocks curl http://httpbin.org/ip
tsocks node script.js# SOCKS5 proxy
gost -L :8080 -F socks5://127.0.0.1:1080
# HTTP proxy
gost -L :8080 -F http://proxy:8080
# Chain proxies
gost -L :8080 -F socks5://proxy1:1080 -F http://proxy2:8080export HTTP_PROXY=http://proxy:8080
export SOCKS_PROXY=socks5://127.0.0.1:1080
with-proxy curl http://httpbin.org/ip
with-proxy bun script.js| Tool | Protocols Supported | Environment Variable Support | Level | Notes |
|---|---|---|---|---|
| proxychains | All TCP | ❌ Ignores env vars | System | Forces all TCP through SOCKS |
| tsocks | All TCP | ❌ Ignores env vars | System | Transparent SOCKS proxy |
| torify | All TCP | ❌ Ignores env vars | System | Routes through Tor SOCKS |
| ProxyChains-NG | All TCP/UDP | ❌ Ignores env vars | System | Modern proxychains |
// Option 1: global-agent (affects ALL modules)
const globalAgent = require('global-agent');
globalAgent.bootstrap();
process.env.GLOBAL_AGENT_HTTP_PROXY = 'http://proxy:8080';
process.env.GLOBAL_AGENT_HTTPS_PROXY = 'socks5://proxy:1080';
// Now ALL HTTP requests go through proxy automatically
const axios = require('axios');
const response = await axios.get('http://httpbin.org/ip'); // Uses proxy
// Option 2: proxy-agent (auto-detects proxy type)
const { ProxyAgent } = require('proxy-agent');
const agent = new ProxyAgent('socks5://proxy:1080');
const response = await fetch('http://httpbin.org/ip', { agent });
// Option 3: Create universal proxy wrapper
class UniversalProxy {
constructor() {
this.agents = new Map();
}
getAgent(url) {
const proxyUrl = process.env.ALL_PROXY || process.env.HTTP_PROXY;
if (!proxyUrl) return undefined;
if (!this.agents.has(proxyUrl)) {
if (proxyUrl.startsWith('socks')) {
this.agents.set(proxyUrl, new (require('socks-proxy-agent').SocksProxyAgent)(proxyUrl));
} else {
this.agents.set(proxyUrl, new (require('https-proxy-agent').HttpsProxyAgent)(proxyUrl));
}
}
return this.agents.get(proxyUrl);
}
async fetch(url, options = {}) {
options.agent = this.getAgent(url);
return fetch(url, options);
}
}// Option 1: Use built-in environment variable support
client := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyFromEnvironment, // Supports HTTP_PROXY, HTTPS_PROXY, ALL_PROXY
},
}
// Option 2: Manual SOCKS5 setup
import "golang.org/x/net/proxy"
dialer, err := proxy.SOCKS5("tcp", "127.0.0.1:1080", nil, proxy.Direct)
transport := &http.Transport{
DialContext: dialer.DialContext,
}
client := &http.Client{Transport: transport}
// Option 3: Universal proxy function
func CreateProxyClient() *http.Client {
proxyURL := os.Getenv("ALL_PROXY")
if proxyURL == "" {
proxyURL = os.Getenv("HTTP_PROXY")
}
if proxyURL != "" {
if strings.HasPrefix(proxyURL, "socks5://") {
// SOCKS5 proxy
dialer, _ := proxy.SOCKS5("tcp", strings.TrimPrefix(proxyURL, "socks5://"), nil, proxy.Direct)
return &http.Client{
Transport: &http.Transport{DialContext: dialer.DialContext},
}
} else {
// HTTP proxy
return &http.Client{
Transport: &http.Transport{Proxy: http.ProxyURL(mustParseURL(proxyURL))},
}
}
}
return &http.Client{}
}// Option 1: Environment variable support (built-in)
let client = reqwest::Client::builder()
.proxy(reqwest::Proxy::all(std::env::var("ALL_PROXY")?)?)
.build()?;
// Option 2: Manual SOCKS5 configuration
use tokio_socks::tcp::Socks5Stream;
let proxy_stream = Socks5Stream::connect("127.0.0.1:1080", "httpbin.org:80").await?;
// Option 3: Universal proxy client
use std::env;
use reqwest::{Client, Proxy};
fn create_proxy_client() -> Result<Client, Box<dyn std::error::Error>> {
let mut builder = Client::builder();
if let Ok(proxy_url) = env::var("ALL_PROXY") {
builder = builder.proxy(Proxy::all(&proxy_url)?);
} else if let Ok(http_proxy) = env::var("HTTP_PROXY") {
builder = builder.proxy(Proxy::http(&http_proxy)?);
}
Ok(builder.build()?)
}(* SOCKS5 client implementation *)
module ProxyClient = struct
type proxy_config =
| HTTP of Uri.t
| SOCKS5 of string * int * (string * string) option
| Direct
let get_proxy_from_env () =
match Sys.getenv_opt "ALL_PROXY" with
| Some url when String.prefix ~pre:"socks5://" url ->
(* Parse SOCKS5 URL *)
SOCKS5 ("127.0.0.1", 1080, None)
| Some url -> HTTP (Uri.of_string url)
| None ->
match Sys.getenv_opt "HTTP_PROXY" with
| Some url -> HTTP (Uri.of_string url)
| None -> Direct
let make_request ~proxy_config ~uri =
match proxy_config with
| Direct -> Cohttp_lwt_unix.Client.get uri
| HTTP proxy_uri ->
let resolver = Resolver.create ~proxy:proxy_uri () in
Cohttp_lwt_unix.Client.get ~resolver uri
| SOCKS5 (host, port, auth) ->
(* Use lwt-socks or similar *)
Socks_client.connect ~proxy:(`TCP (`IP (Ipaddr.of_string host), port))
~target:(`Domain (Uri.host_with_default uri, 80)) ()
end| Language | Library | Auto-detects Proxy Type | Environment Variables | SOCKS Support |
|---|---|---|---|---|
| JavaScript | proxy-agent | ✅ Yes | ✅ Yes | ✅ Yes |
| JavaScript | global-agent | ✅ Yes | ✅ Yes | ✅ Yes |
| Go | net/http + ProxyFromEnvironment | ✅ Yes | ✅ Yes | ✅ Yes* |
| Rust | reqwest | ✅ Yes | ✅ Yes | ✅ Yes |
| Python | httpx[socks] | ✅ Yes | ✅ Yes | ✅ Yes |
| Python | requests[socks] | ❌ No | ✅ Yes | ✅ Yes |
*With golang.org/x/net/proxy package