Home/Docs/Python Requests
Integration guide 150+ countries 99.9% uptime

How to Use ProxyOmega Proxies with Python Requests

requests is the most-used HTTP client in Python and still the right choice for any non-browser scraping job that does not need JavaScript. Proxy support is built in — you point requests at ProxyOmega via the proxies kwarg and you are done.

Quick start

Use the Premium Unlimited endpoint below — it accepts the username-modifier syntax used throughout this guide. Other plans use the same code shape with a different host and port (see the endpoint table at the bottom).

Quick startpython
# pip install requests
import requests

proxies = {
    'http':  'http://<USERNAME>:<PASSWORD>@premium.proxyomega.com:8000',
    'https': 'http://<USERNAME>:<PASSWORD>@premium.proxyomega.com:8000',
}

r = requests.get('https://api.ipify.org?format=json',
                 proxies=proxies, timeout=30)
print(r.status_code, r.json())

Rotation: sticky session vs rotating

Append -session-<id>-ttl-<seconds> to your username to hold the same exit IP. Drop the suffix entirely for a fresh IP on every request.

Sticky session vs rotatingpython
import requests, uuid

base = 'premium.proxyomega.com:8000'

# Rotating: bare username — fresh IP per request
rotating = {'https': f'http://<USERNAME>:<PASSWORD>@{base}'}

# Sticky: keep IP for 300s
sid = uuid.uuid4().hex[:8]
sticky = {'https': f'http://<USERNAME>-session-{sid}-ttl-300:<PASSWORD>@{base}'}

for _ in range(3):
    print(requests.get('https://api.ipify.org', proxies=sticky).text)

Country targeting

Add -country-XX (ISO 3166 alpha-2) to your username. State and city modifiers are supported on Premium Unlimited, Platinum and Mobile.

Country and city targetingpython
base = 'premium.proxyomega.com:8000'

de       = {'https': f'http://<USERNAME>-country-de:<PASSWORD>@{base}'}
us_ny    = {'https': f'http://<USERNAME>-country-us-state-NY:<PASSWORD>@{base}'}
us_city  = {'https': f'http://<USERNAME>-country-us-city-newyork:<PASSWORD>@{base}'}

import requests
print(requests.get('https://api.ipify.org', proxies=de).text)

Authentication: username/password vs IP whitelist

Two ways to authenticate. Username/password is set on every request and is what every example in this guide uses. IP whitelist is configured in the ProxyOmega dashboard — once your runner IP is listed, drop the credentials from the proxy URL and the connection is authorised by source IP.

requests passes the URL credentials as a Proxy-Authorization header automatically. If you prefer IP whitelisting, add the calling server IP in the dashboard and omit the credentials portion of the URL.

Common errors and fixes

HTTP 407 Proxy Authentication Required

Wrong username or password, or the credentials contain a special character that was not URL-encoded. Re-copy from the dashboard.

Connection refused / connection reset

Either the runner IP is not on your whitelist (if you use IP auth) or your network blocks outbound on the proxy port. Test with curl first.

Read timeout / no response

Residential exits sometimes have tail latency. Raise client timeout to 30–60 s and enable retry. If timeouts persist across many sessions, the target is rate-limiting your country — switch country.

Always the same IP returned

You have a -session- suffix in your username, or HTTP keep-alive is reusing the connection. Drop the session suffix and disable keep-alive on the client to force new exits.

Recommended plan

Premium Unlimited Residential
Username-modifier API gives you per-request country / session control with no SDK install.
View plan

All endpoints

PlanHostPortNotes
Budget Unlimitedresidential.proxyomega.com10000–10099Per-port country / rotation set in the dashboard. No username suffixes.
Premium Unlimitedpremium.proxyomega.com8000Username modifiers: -country-XX, -session-{id}-ttl-{seconds}.
Platinumplatinum.proxyomega.com20228ASN / state / city targeting via username modifiers.
Mobilemobile.proxyomega.com20229Real 4G/5G carrier IPs. Same username modifier syntax.
IPv6ipv6.proxyomega.com9000IPv6 exits, supports UDP_ASSOCIATE.

FAQ

Should I reuse a Session() for performance?

Yes — requests.Session() keeps the TCP/TLS connection to the proxy alive, which removes ~150ms per request. Use a separate Session per sticky-id if you need parallel identities.

I keep getting SSLError through the proxy.

Almost always urllib3 trying to verify the proxy CA. Ensure your scheme is http://...@premium... even when the target is HTTPS — the proxy itself speaks HTTP CONNECT, not HTTPS.

How do I rotate manually inside a loop?

Append a different -session-<id> each iteration, or omit the session suffix entirely to get a new IP per request.

Does aiohttp work the same way?

Yes — pass proxy="http://<USERNAME>:<PASSWORD>@premium.proxyomega.com:8000" to session.get(). Same modifier syntax applies.

Related guides

Ready to use ProxyOmega with Python Requests?
Sign up in under a minute. Pay-as-you-go and unlimited plans available.