Skip to main content

Python Integration

This guide covers using WeProxies with popular Python HTTP libraries.

Requests​

The most popular Python HTTP library.

Installation​

pip install requests

Basic Usage​

import requests

PROXY_USER = "wp_user123"
PROXY_PASS = "your-password"
PROXY_HOST = "proxy.weproxies.com"
PROXY_PORT = "1080"

proxies = {
"http": f"http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}",
"https": f"http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
}

response = requests.get("https://api.ipify.org?format=json", proxies=proxies)
print(response.json())

With Country Targeting​

def get_proxy(username, password, country=None, session=None):
user = username
if country:
user += f"-country-{country}"
if session:
user += f"-session-{session}"

return {
"http": f"http://{user}:{password}@proxy.weproxies.com:1080",
"https": f"http://{user}:{password}@proxy.weproxies.com:1080"
}

# US IP
proxy = get_proxy("wp_user123", "password", country="US")
response = requests.get("https://api.ipify.org", proxies=proxy)

# UK IP with sticky session
proxy = get_proxy("wp_user123", "password", country="GB", session="uk-session-1")
response = requests.get("https://api.ipify.org", proxies=proxy)

Session with Retry Logic​

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

def create_session(proxies, retries=3):
session = requests.Session()
session.proxies.update(proxies)

retry = Retry(
total=retries,
backoff_factor=0.5,
status_forcelist=[500, 502, 503, 504]
)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)

return session

# Usage
proxies = get_proxy("wp_user123", "password", country="US")
session = create_session(proxies)

response = session.get("https://example.com", timeout=30)

aiohttp (Async)​

For high-performance async HTTP requests.

Installation​

pip install aiohttp

Basic Usage​

import aiohttp
import asyncio

async def fetch(url):
proxy = "http://wp_user123:password@proxy.weproxies.com:1080"

async with aiohttp.ClientSession() as session:
async with session.get(url, proxy=proxy) as response:
return await response.text()

# Run
result = asyncio.run(fetch("https://api.ipify.org"))
print(result)

Concurrent Requests​

import aiohttp
import asyncio

async def fetch_with_proxy(session, url, proxy):
async with session.get(url, proxy=proxy, timeout=30) as response:
return await response.json()

async def fetch_all(urls, username, password):
proxy = f"http://{username}:{password}@proxy.weproxies.com:1080"

async with aiohttp.ClientSession() as session:
tasks = [fetch_with_proxy(session, url, proxy) for url in urls]
return await asyncio.gather(*tasks, return_exceptions=True)

# Fetch multiple URLs concurrently
urls = [
"https://api.ipify.org?format=json",
"https://httpbin.org/ip",
"https://ifconfig.me/ip"
]

results = asyncio.run(fetch_all(urls, "wp_user123", "password"))
for result in results:
print(result)

With Country Rotation​

import aiohttp
import asyncio
import random

COUNTRIES = ["US", "GB", "DE", "FR", "JP"]

async def fetch_from_country(session, url, username, password, country):
proxy = f"http://{username}-country-{country}:{password}@proxy.weproxies.com:1080"

async with session.get(url, proxy=proxy) as response:
return {
"country": country,
"data": await response.json()
}

async def scrape_with_rotation(urls, username, password):
async with aiohttp.ClientSession() as session:
tasks = []
for url in urls:
country = random.choice(COUNTRIES)
tasks.append(fetch_from_country(session, url, username, password, country))

return await asyncio.gather(*tasks)

# Usage
urls = ["https://httpbin.org/ip"] * 10
results = asyncio.run(scrape_with_rotation(urls, "wp_user123", "password"))

httpx (Modern Alternative)​

A modern, async-capable HTTP client.

Installation​

pip install httpx

Sync Usage​

import httpx

proxy = "http://wp_user123:password@proxy.weproxies.com:1080"

with httpx.Client(proxy=proxy) as client:
response = client.get("https://api.ipify.org?format=json")
print(response.json())

Async Usage​

import httpx
import asyncio

async def fetch():
proxy = "http://wp_user123:password@proxy.weproxies.com:1080"

async with httpx.AsyncClient(proxy=proxy) as client:
response = await client.get("https://api.ipify.org?format=json")
return response.json()

result = asyncio.run(fetch())
print(result)

Best Practices​

1. Use Environment Variables​

import os

PROXY_USER = os.environ.get("WEPROXIES_USER")
PROXY_PASS = os.environ.get("WEPROXIES_PASS")

2. Implement Proper Timeouts​

response = requests.get(url, proxies=proxies, timeout=(10, 30))
# (connect_timeout, read_timeout)

3. Handle Errors Gracefully​

try:
response = requests.get(url, proxies=proxies, timeout=30)
response.raise_for_status()
except requests.exceptions.ProxyError as e:
print(f"Proxy error: {e}")
except requests.exceptions.Timeout as e:
print(f"Timeout: {e}")
except requests.exceptions.RequestException as e:
print(f"Request failed: {e}")

4. Rotate User Agents​

import random

USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36"
]

headers = {"User-Agent": random.choice(USER_AGENTS)}
response = requests.get(url, proxies=proxies, headers=headers)