How to Use a Proxy: Browser, curl and Python Setup

You found a proxy in the list — now what? This guide shows how to plug a proxy into the tools people use most: browsers, the system settings, curl and Python. Every example uses IP:PORT as a placeholder; copy the real values from the free proxy list.

Before you start

  • Pick a proxy that was checked a few seconds ago and has low latency.
  • Note the protocol: an HTTP proxy and a SOCKS5 proxy are configured differently.
  • Keep two or three spare proxies — free ones can go offline at any moment.

Firefox

Firefox has its own proxy settings, independent of the system:

  1. Open Settings → General → Network Settings → Settings…
  2. Choose Manual proxy configuration.
  3. For an HTTP proxy, enter the IP and port in HTTP Proxy and tick Also use this proxy for HTTPS.
  4. For SOCKS, fill in SOCKS Host, choose SOCKS v5 (or v4) and tick Proxy DNS when using SOCKS v5.
  5. Click OK and open any "what is my IP" page to confirm.

Chrome and Edge

Chromium-based browsers use the system proxy by default. To use a proxy only in the browser, start it with a flag:

chrome --proxy-server="http://IP:PORT"
chrome --proxy-server="socks5://IP:PORT"

Proxy-switcher extensions do the same with a button and are handy if you change proxies often.

Windows and macOS

  • Windows: Settings → Network & Internet → Proxy → Manual proxy setup → enter the address and port.
  • macOS: System Settings → Network → your connection → Details → Proxies → enable Web Proxy (HTTP), Secure Web Proxy (HTTPS) or SOCKS Proxy.

System settings affect every program that respects them, so remember to turn the proxy off afterwards.

curl

curl -x http://IP:PORT https://example.com
curl --socks5-hostname IP:PORT https://example.com

--socks5-hostname makes the proxy resolve the domain, so your DNS requests do not leak. Add --max-time 15 to avoid hanging on a dead proxy.

Python requests

import requests

proxy = "http://IP:PORT"            # or "socks5h://IP:PORT"
r = requests.get(
    "https://example.com",
    proxies={"http": proxy, "https": proxy},
    timeout=15,
)
print(r.status_code)

SOCKS support needs one extra package: pip install "requests[socks]".

Scrapy

Set the proxy per request through meta:

yield scrapy.Request(url, meta={"proxy": "http://IP:PORT"})

Rotating free proxies

Free proxies are best used as a pool. Download a fresh list from our API, try proxies in turn, and drop the ones that fail:

import random, requests

pool = requests.get(
    "https://SITE/api/v1/proxies?protocol=http&anonymity=elite&format=txt"
).text.split()

for attempt in range(5):
    proxy = "http://" + random.choice(pool)
    try:
        r = requests.get("https://example.com",
                         proxies={"http": proxy, "https": proxy}, timeout=10)
        break
    except requests.RequestException:
        pool.remove(proxy.removeprefix("http://"))

Replace SITE with this website's address. Refresh the pool every few minutes — the list itself is updated every 30 seconds.

Troubleshooting

  • Connection refused or timeout — the proxy went offline. Take the next one.
  • 407 Proxy Authentication Required — the proxy now requires a password; skip it.
  • Captchas everywhere — switch to an elite proxy or a different country.
  • Website sees your real IP — the proxy is transparent, or your program ignores the proxy settings.

When free proxies are not enough, read our comparison of free and paid proxies.

Also available in: РусскийEspañol简体中文Tiếng Việt

Read next