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)