GProxy + Python requests — 2026 完整集成指南
用 4 行代码,在 Python requests 库中使用 GProxy 住宅代理、数据中心代理或 IPv6 代理。本指南涵盖 HTTP/SOCKS5 认证、会话复用、轮换、错误处理和常见陷阱,并附可直接复制的示例代码。
准备事项
- ✓Python 3.7 或更高版本
- ✓已安装 requests 库(pip install requests)
- ✓使用 SOCKS5 需要:requests[socks](pip install requests[socks])
- ✓拥有有效凭据的 GProxy 账户(住宅、数据中心或 IPv6)
分步设置
安装依赖
安装 requests 库。如果计划使用 SOCKS5 代理,请一并安装 socks 扩展。
pip install requests
pip install requests[socks] # 用于 SOCKS5 支持
获取您的 GProxy 凭据
登录您的 GProxy 控制台,在相应的产品页面(住宅 / Premium Datacenter / IPv6)复制代理主机、端口、用户名和密码。
使用带认证的 HTTP 代理
最简单的形式。把 proxies 字典传给 requests。GProxy 在 URL 中使用 Basic Auth。
import requests
proxies = {
'http': 'http://USERNAME:[email protected]:8080',
'https': 'http://USERNAME:[email protected]:8080',
}
r = requests.get('https://api.ipify.org?format=json', proxies=proxies, timeout=15)
print(r.json())
# {'ip': '<your-proxy-egress-ip>'}
使用 SOCKS5 代理
使用 SOCKS5 时,在 URL 前加上 socks5h://(h 表示 DNS 解析在代理端完成——这对匿名性很重要)。
import requests
proxies = {
'http': 'socks5h://USERNAME:[email protected]:1080',
'https': 'socks5h://USERNAME:[email protected]:1080',
}
r = requests.get('https://api.ipify.org?format=json', proxies=proxies, timeout=15)
print(r.json())
复用会话发起多次请求
通过同一个代理发起多次请求时(以及为了保持 keep-alive 连接),请使用 Session。这比每次都新建请求快得多。
import requests
session = requests.Session()
session.proxies = {
'http': 'http://USERNAME:[email protected]:8080',
'https': 'http://USERNAME:[email protected]:8080',
}
for url in ['https://example.com/page1', 'https://example.com/page2']:
r = session.get(url, timeout=15)
print(r.status_code, len(r.content))
每次请求轮换代理
对于轮换住宅代理或 IPv6 代理,每个新连接都会从池中获得一个新 IP。用一个列表随机选取或按轮询顺序选取。
import random
import requests
PROXIES = [
'http://USERNAME:[email protected]:8001',
'http://USERNAME:[email protected]:8002',
'http://USERNAME:[email protected]:8003',
]
def fetch(url):
proxy_url = random.choice(PROXIES)
return requests.get(url, proxies={'http': proxy_url, 'https': proxy_url}, timeout=15)
for _ in range(5):
r = fetch('https://api.ipify.org?format=json')
print(r.json())
处理错误与重试
网络错误和代理超时在所难免。用 try/except 包裹调用,并换一个代理重试。urllib3.Retry 会自动处理 HTTP 层面的重试。
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
retry_strategy = Retry(
total=3,
backoff_factor=1,
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods=['GET', 'POST'],
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session = requests.Session()
session.mount('http://', adapter)
session.mount('https://', adapter)
session.proxies = {'http': 'http://USERNAME:[email protected]:8080',
'https': 'http://USERNAME:[email protected]:8080'}
try:
r = session.get('https://example.com', timeout=15)
r.raise_for_status()
except requests.exceptions.ProxyError:
print('Proxy failed — rotate to next')
except requests.exceptions.Timeout:
print('Timeout — increase timeout or change proxy')
except requests.exceptions.RequestException as e:
print(f'Other error: {e}')
代码示例
import requests
proxies = {'http': 'http://USER:[email protected]:8080',
'https': 'http://USER:[email protected]:8080'}
print(requests.get('https://api.ipify.org?format=json', proxies=proxies).json())
import httpx
import asyncio
async def fetch_all(urls):
async with httpx.AsyncClient(proxy='http://USER:[email protected]:8080') as client:
return await asyncio.gather(*[client.get(u) for u in urls])
results = asyncio.run(fetch_all(['https://example.com/p1', 'https://example.com/p2']))
for r in results:
print(r.status_code)
import requests
session = requests.Session()
session.proxies = {'http': 'http://USER:[email protected]:8080',
'https': 'http://USER:[email protected]:8080'}
session.headers.update({
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept-Language': 'en-US,en;q=0.9',
})
resp = session.get('https://example.com/login')
# Cookie 会在多次请求之间自动保持
resp = session.post('https://example.com/login', data={'user': 'me', 'pass': 'x'})
为什么把 Python requests 和 GProxy 搭配使用?
Python requests 是安装量最大的 Python HTTP 库——累计下载量超过 300 亿次。接入 GProxy 代理只需 2 行代码,就能打通所有需要 IP 轮换、地域定向或反机器人绕过的抓取、监控和自动化流程。本指南是端到端的:配置、代码、边界情况、故障排查。
HTTP 还是 SOCKS5——该用哪个?
在 95% 的场景中,HTTP 就够用,而且更快。SOCKS5 在以下情况更有优势:(a) UDP 流量(游戏、自定义协议);(b) 完全非 HTTP 的协议;(c) 希望由代理来处理 DNS(此时使用 socks5h://)。GProxy 的每款产品都同时支持两者——按场景选择即可。
粘性会话说明
GProxy 轮换住宅代理默认每次请求更换 IP。有些流程需要在几分钟内保持同一个 IP(登录流程、多步表单)。为此,在用户名后附加一个会话令牌:
USERNAME = 'your_user-session-abc123' # -session- 后面的任意字符串都会把 IP 锁定约 30 分钟
相同的会话 ID = 相同的 IP。更换 ID = 获得新 IP。
性能建议
- 使用
requests.Session。它会复用 TCP 连接,对同一主机的多次请求快 5-10 倍。 - 设置合理的超时。默认没有超时——如果代理很慢,脚本会永远挂住。住宅代理建议 15-30 秒。
- 只需要状态码时不要加载响应体。使用
stream=True并关闭连接。 - 并行请求——5-50 个并发连接用
concurrent.futures.ThreadPoolExecutor,100 以上用asyncio + httpx。
常见坑
- 通过 HTTP 代理访问 HTTPS 时出现 SSL 错误。加上
verify=True(默认值)——生产环境绝不要设为 False。如果证书错误明确指向代理,请确认使用的主机名正确。 - 密码包含特殊字符。放进 proxies 字典之前先对密码做 URL 编码:
urllib.parse.quote(password, safe='')。 - 传入 proxies={} 时,requests 不会读取代理环境变量。如果希望通过环境变量配置,请在会话上使用
trust_env=True。
应用场景
大规模网页抓取
结合 requests 与 GProxy 住宅代理轮换,抓取电商网站而不被封 IP。
API 请求分流
使用 GProxy IPv6 代理池分散 API 调用,规避按 IP 计算的速率限制。
SERP 监控
在不同城市的住宅代理之间轮换,跟踪本地 Google 排名。
价格情报
用数据中心代理对无防护的价格页面做高并发爬取。
球鞋抢购机器人的 HTTP 层
在球鞋发售的首轮尝试中使用 ISP 静态纯净代理(GProxy $6.50/IP 纯净档)。
社交媒体健康检查
用单个粘性住宅会话,验证地域定向账号的广告投放情况。
用 Session,不要在循环里调用 requests.get()。单个会话保持连接存活——每次请求可节省 100-500ms。
粘性会话与轮换会话混用。多步骤流程(登录 → 操作 → 退出)用粘性,无状态抓取用轮换。
出错时记录出口 IP。在每次抓取开始处加上 print(requests.get('https://api.ipify.org', proxies=proxies).text),确认轮换正常工作。
