The essential points from this guide -- each one is explained in detail below.
requests库接受一个包含http和https两个键的proxies字典,值指向你的网关地址。
httpx用同一个proxy参数,同时支持同步和异步两种调用方式。
aiohttp需要在每次请求时传入proxy参数,或者在连接器层面统一配置。
设置HTTP_PROXY和HTTPS_PROXY环境变量后,requests、httpx等大多数Python客户端都会自动读取,不用改代码。
Session级别的代理配置能复用底层连接池,避免每次请求都重复传参数。
requests是Python里最常用的HTTP客户端。可以在每次请求时传入proxies字典,也可以设置在Session对象上供多次请求复用。字典把协议名映射到代理地址,requests会自动把对应协议的流量路由到指定代理。
import requests
proxy_url = 'http://USER:PASS@gw.knoxproxy.com:7000'
proxies = {
'http': proxy_url,
'https': proxy_url,
}
# 单次请求配置代理
response = requests.get('https://httpbin.org/ip', proxies=proxies, timeout=30)
print(response.json())
# Session级别配置(多次请求时推荐)
session = requests.Session()
session.proxies.update(proxies)
for url in urls:
r = session.get(url, timeout=30)如果要发很多请求,优先用Session级别的配置,因为它能复用底层的TCP连接池,不用每次都重复传proxies参数。Session还会在多次请求之间保持cookie和请求头的一致性。
httpx是一个现代HTTP客户端,同步和异步调用共用同一套API,内置代理认证、HTTP/2和连接池管理。proxy参数既可以传一个URL字符串,也可以传一个协议到地址的映射字典。
import httpx
proxy_url = 'http://USER:PASS@gw.knoxproxy.com:7000'
# 同步客户端
with httpx.Client(proxy=proxy_url) as client:
r = client.get('https://httpbin.org/ip')
print(r.json())
# 异步客户端,适合大规模采集
async with httpx.AsyncClient(proxy=proxy_url) as client:
r = await client.get('https://httpbin.org/ip')
print(r.json())做大规模抓取时,异步客户端更合适,因为它能维持成百上千个并发连接而不用开多线程。通过backconnect网关发出的每个请求,都会自动拿到不同的出口IP。
aiohttp是Python里最成熟的异步HTTP客户端,被广泛用在采集框架和Web应用里。它在请求级别通过proxy参数支持代理配置,认证信息直接嵌在URL里。
import aiohttp
import asyncio
async def fetch(url):
proxy = 'http://USER:PASS@gw.knoxproxy.com:7000'
async with aiohttp.ClientSession() as session:
async with session.get(url, proxy=proxy, timeout=aiohttp.ClientTimeout(total=30)) as resp:
return await resp.text()
# 并发请求,每个请求拿到不同出口IP
async def scrape(urls):
proxy = 'http://USER:PASS@gw.knoxproxy.com:7000'
async with aiohttp.ClientSession() as session:
tasks = [session.get(url, proxy=proxy) for url in urls]
responses = await asyncio.gather(*tasks, return_exceptions=True)
return responses和httpx不同,aiohttp需要在每次请求时单独传proxy参数,不支持在session级别统一设置。做大规模采集时,建议把代理逻辑封装成一个helper函数,让业务代码保持整洁。
requests、httpx、urllib3等大多数Python HTTP客户端,都会自动读取HTTP_PROXY和HTTPS_PROXY这两个环境变量。这种方式的好处是把认证信息从源代码里拿出来,换代理时不用改代码,只改变量值。
export HTTP_PROXY="http://USER:PASS@gw.knoxproxy.com:7000"
export HTTPS_PROXY="http://USER:PASS@gw.knoxproxy.com:7000"
export NO_PROXY="localhost,127.0.0.1"设置好这几个变量后,requests发出的请求即使不显式传proxies参数,也会自动走配置好的代理。NO_PROXY变量用来把特定主机排除在代理之外,对本地服务和健康检查接口很有用。生产环境部署时,建议把这些值放进CI/CD的密钥配置,或用python-dotenv加载的.env文件,而不是写死在shell配置文件里。
在跨境电商团队里,Python脚本经常要同时监控亚马逊、Shopee、速卖通等多个平台上,同一款产品在不同国家的价格和库存,这类任务几乎都要靠代理切换IP所在地区,才能看到当地用户看到的真实页面。海外SEO团队也用同样的思路,通过不同国家的出口IP,检查落地页在Google、Bing不同地区结果里的排名和展示效果。
社交媒体运营团队管理多个海外账号时,同样离不开代理:如果所有账号都从同一个IP登录,平台很容易判断这些账号是关联账号并批量限制。给每个账号配一个独立、稳定的代理出口,是常见的做法。以上这些场景对Python脚本本身的要求并不复杂,关键在于代理连接是否稳定,以及IP的地理位置是否覆盖目标市场。
Ready to put this into practice? 浏览住宅代理产品
KnoxProxy Research Team · 技术内容团队
在反机器人系统、网页抓取和IP路由领域拥有10年以上经验的网络工程师和代理基础设施专家。
Ethically sourced residential IPs across 195 countries. Instant activation, 14-day money-back guarantee.