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).
# 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.
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.
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
Wrong username or password, or the credentials contain a special character that was not URL-encoded. Re-copy from the dashboard.
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.
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.
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
All endpoints
| Plan | Host | Port | Notes |
|---|---|---|---|
| Budget Unlimited | residential.proxyomega.com | 10000–10099 | Per-port country / rotation set in the dashboard. No username suffixes. |
| Premium Unlimited | premium.proxyomega.com | 8000 | Username modifiers: -country-XX, -session-{id}-ttl-{seconds}. |
| Platinum | platinum.proxyomega.com | 20228 | ASN / state / city targeting via username modifiers. |
| Mobile | mobile.proxyomega.com | 20229 | Real 4G/5G carrier IPs. Same username modifier syntax. |
| IPv6 | ipv6.proxyomega.com | 9000 | IPv6 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.