Python
Connect to RaxyProxy from Python using requests, httpx, or aiohttp.
requests
The simplest way to use proxies in Python. No extra dependencies beyond pip install requests.
basic.py
import requests
PROXY = "http://USERNAME:PASSWORD@proxy.raxyproxy.com:823"
proxies = {
"http": PROXY,
"https": PROXY,
}
r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=15)
print(r.json()) # {"origin": "203.0.113.42"}Geo-targeting
geo.py
import requests
# Route through US IPs only (free, no 2× surcharge)
proxies_us = {
"http": "http://USERNAME__cr.us:PASSWORD@proxy.raxyproxy.com:823",
"https": "http://USERNAME__cr.us:PASSWORD@proxy.raxyproxy.com:823",
}
# City-level (Los Angeles) — consumes 2× traffic for residential/mobile/datacenter
proxies_la = {
"http": "http://USERNAME__cr.us;city.losangeles:PASSWORD@proxy.raxyproxy.com:823",
"https": "http://USERNAME__cr.us;city.losangeles:PASSWORD@proxy.raxyproxy.com:823",
}
r = requests.get("https://httpbin.org/ip", proxies=proxies_us)
print(r.json())Sticky sessions
sticky.py
import requests
# sessid sticky — same IP for ~30 min on standard port
SESSION_ID = "my-workflow-abc123"
proxy_url = f"http://USERNAME__sessid.{SESSION_ID}:PASSWORD@proxy.raxyproxy.com:823"
proxies = {"http": proxy_url, "https": proxy_url}
r1 = requests.get("https://httpbin.org/ip", proxies=proxies)
r2 = requests.get("https://httpbin.org/ip", proxies=proxies)
print(r1.json(), r2.json()) # same IP both times
# Port-based sticky — port 10001 always returns the same IP
proxies_sticky_port = {
"http": "http://USERNAME:PASSWORD@proxy.raxyproxy.com:10001",
"https": "http://USERNAME:PASSWORD@proxy.raxyproxy.com:10001",
}
r3 = requests.get("https://httpbin.org/ip", proxies=proxies_sticky_port)
print(r3.json())httpx (async)
pip install httpx — supports async and has built-in proxy support.
httpx_example.py
import asyncio
import httpx
PROXY = "http://USERNAME:PASSWORD@proxy.raxyproxy.com:823"
async def fetch(url: str) -> dict:
async with httpx.AsyncClient(proxy=PROXY, timeout=15) as client:
r = await client.get(url)
return r.json()
async def main():
# Run 10 concurrent requests — each gets a different IP
tasks = [fetch("https://httpbin.org/ip") for _ in range(10)]
results = await asyncio.gather(*tasks)
for r in results:
print(r["origin"])
asyncio.run(main())aiohttp
pip install aiohttp
aiohttp_example.py
import asyncio
import aiohttp
PROXY = "http://proxy.raxyproxy.com:823"
AUTH = aiohttp.BasicAuth("USERNAME", "PASSWORD")
async def fetch(session: aiohttp.ClientSession, url: str) -> str:
async with session.get(url, proxy=PROXY, proxy_auth=AUTH) as r:
data = await r.json()
return data["origin"]
async def main():
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, "https://httpbin.org/ip") for _ in range(5)]
results = await asyncio.gather(*tasks)
print(results)
asyncio.run(main())Session Pool Pattern
Manage a pool of sticky proxy slots for parallel independent sessions.
pool.py
import requests
from concurrent.futures import ThreadPoolExecutor
HOST = "proxy.raxyproxy.com"
USER = "USERNAME"
PASS = "PASSWORD"
def make_proxy(port: int) -> dict:
"""Each port 10001–10010 is a dedicated sticky slot."""
url = f"http://{USER}:{PASS}@{HOST}:{port}"
return {"http": url, "https": url}
def scrape(task: tuple[int, str]) -> dict:
slot, url = task
proxies = make_proxy(10000 + slot)
r = requests.get(url, proxies=proxies, timeout=15)
return {"slot": slot, "ip": r.json()["origin"], "url": url}
urls = [f"https://example.com/page/{i}" for i in range(10)]
tasks = list(enumerate(urls))
with ThreadPoolExecutor(max_workers=10) as pool:
results = list(pool.map(scrape, tasks))
for r in results:
print(f"Slot {r['slot']} (IP {r['ip']}): {r['url']}")For large-scale scraping, combine rotating proxies (port 823) with a retry mechanism. See Troubleshooting for common error codes and how to handle them.