接入指南
Python requests 代理设置教程
requests 库接受一个普通的 URL 作为代理。本指南带你配好一个可用的代理,打印对方看到的 IP,并讲清第一次运行时最常遇到的几个错误。
开始之前
- 已安装 requests 的 Python 3:pip install requests。
- 一个处于有效状态的 ProxyPanda 服务,并在控制台中打开它的页面。
- 一个可以运行 Python 脚本的终端。
你的连接信息
登录控制台,打开你购买的服务。服务页面上会显示该服务的主机、端口、用户名和密码。ProxyPanda 没有一个统一的固定地址,所以每次都请从那里复制。指南中的代码使用下面这些占位符,请逐一替换成你自己的值。
- HOST
- 该服务的代理地址,按服务页面上显示的原样填写。
- PORT
- 要连接的端口。请和主机一起复制,因为不同服务的端口可能不同。
- USERNAME
- 你的代理登录名。它与你登录控制台所用的邮箱是分开的。
- PASSWORD
- 请完整复制。住宅代理在控制台中选择的选项会附加在密码末尾,凭记忆手动输入的密码会丢失这些选项。
把你用来连接的 IP 地址加入服务的白名单,就可以不用用户名和密码。这时代码里只需要 HOST 和 PORT。
示例都使用 HTTP,它可以通过加密隧道访问 https 网站。SOCKS5 同样可用:住宅代理的端口两种都接受,ISP 和数据中心代理在控制台里切换协议。
步骤
拼出代理 URL
把四个值放进同一个 URL:先写 http://,然后是 USERNAME:PASSWORD,加一个 @,最后是 HOST:PORT。即使要访问的网站是 https,开头也保持 http://。requests 会经代理建立一条加密隧道,页面内容依然通过 TLS 传输。
发一个请求并打印出口 IP
在 proxies 字典的两个键里填同一个 URL。api.ipify.org 会返回请求的来源地址,所以打印出的应该是代理 IP,而不是你自己的 IP。
check_ip.py import requests proxy = "http://USERNAME:PASSWORD@HOST:PORT" proxies = {"http": proxy, "https": proxy} response = requests.get("https://api.ipify.org?format=json", proxies=proxies, timeout=30) print(response.json()["ip"])观察地址的变化
每次调用 requests.get 都会经代理新开一条连接。运行这个循环,对比输出的三行。
rotation.py import requests proxy = "http://USERNAME:PASSWORD@HOST:PORT" proxies = {"http": proxy, "https": proxy} for _ in range(3): print(requests.get("https://api.ipify.org", proxies=proxies, timeout=30).text)需要保持同一地址时用 Session
Session 会在多次调用之间保持到网站的隧道,同一条隧道里的请求都从同一个地址出去。请在每次调用时传入 proxies:shell 里设置的 HTTP_PROXY 和 HTTPS_PROXY 会覆盖 session.proxies。
session.py import requests proxy = "http://USERNAME:PASSWORD@HOST:PORT" proxies = {"http": proxy, "https": proxy} with requests.Session() as session: for _ in range(3): response = session.get("https://api.ipify.org", proxies=proxies, timeout=30) print(response.text)
轮换 IP 与粘性 IP
住宅代理在控制台里有两种模式。选“随机 IP”时,循环输出的三行应该是三个不同的地址。选“粘性 IP”时,地址会在网络允许的范围内尽量保持不变,适合先登录再浏览几个页面。
即使选了“随机 IP”,Session 也可能三次都打印同一个地址,因为它复用了同一条隧道。想每次都换出口时,请分别调用 requests.get。
ISP 和数据中心 IP 不会轮换。每个 IP 在租期内都归你使用,所以两个脚本每一行打印的都是同一个地址。
常见错误与解决办法
ProxyError: Tunnel connection failed: 407 Proxy Authentication Required
代理没有接受你的用户名或密码。从服务页面重新完整复制两者。如果其中含有 @、: 或 /,先用 urllib.parse.quote(value, safe="") 编码。
等了很久之后出现 ProxyError 或 ReadTimeoutError
先核对 HOST 和 PORT 是否与控制台一致。如果一致,就把超时调大:住宅出口是家庭网络,有些响应较慢。只重试这一个请求,不必让整个任务失败。
出现提到 WRONG_VERSION_NUMBER 的 SSLError
代理 URL 以 https:// 开头。改成 http:// 即可。到网站的连接在隧道内仍然是加密的。
脚本打印的是你自己的 IP
这个请求没有经过代理。检查调用里是否带了 proxies=,以及字典里是否有 "https" 键,因为 api.ipify.org 是 https 地址。
其他接入指南
有不明白的词? 术语表用大白话解释。
卡在某一步了?
把命令和报错贴到 Discord,记得先删掉密码。那里的人大多遇到过这些错误。