开始之前

  • 已安装 requests 的 Python 3:pip install requests。
  • 一个处于有效状态的 ProxyPanda 服务,并在控制台中打开它的页面。
  • 一个可以运行 Python 脚本的终端。

你的连接信息

登录控制台,打开你购买的服务。服务页面上会显示该服务的主机、端口、用户名和密码。ProxyPanda 没有一个统一的固定地址,所以每次都请从那里复制。指南中的代码使用下面这些占位符,请逐一替换成你自己的值。

HOST
该服务的代理地址,按服务页面上显示的原样填写。
PORT
要连接的端口。请和主机一起复制,因为不同服务的端口可能不同。
USERNAME
你的代理登录名。它与你登录控制台所用的邮箱是分开的。
PASSWORD
请完整复制。住宅代理在控制台中选择的选项会附加在密码末尾,凭记忆手动输入的密码会丢失这些选项。

把你用来连接的 IP 地址加入服务的白名单,就可以不用用户名和密码。这时代码里只需要 HOST 和 PORT。

示例都使用 HTTP,它可以通过加密隧道访问 https 网站。SOCKS5 同样可用:住宅代理的端口两种都接受,ISP 和数据中心代理在控制台里切换协议。

步骤

  1. 拼出代理 URL

    把四个值放进同一个 URL:先写 http://,然后是 USERNAME:PASSWORD,加一个 @,最后是 HOST:PORT。即使要访问的网站是 https,开头也保持 http://。requests 会经代理建立一条加密隧道,页面内容依然通过 TLS 传输。

  2. 发一个请求并打印出口 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"])
  3. 观察地址的变化

    每次调用 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)
  4. 需要保持同一地址时用 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 地址。

选择哪条产品线

如果你请求的网站不封服务器 IP,数据中心 IP 是大批量跑 requests 最便宜的选择。开始遇到封禁或验证码时换成住宅代理;需要同一个地址连续几周都能用时,选 ISP。

卡在某一步了?

把命令和报错贴到 Discord,记得先删掉密码。那里的人大多遇到过这些错误。

加入 Discorddiscord.gg/proxypanda
$5 起步去 Discord 问