首页 > API 文档 > 代理配置示例

代理配置示例(Python / Scrapy / curl / Postman)

提取到 ip:port 之后,不同工具的写法略有差别。下面都是可直接复制的最小示例;前提是这条代理已授权(把调用方出口 IP 加进白名单,或使用账号密码模式)。

Python requests(带失败换 IP)

import requests

API = ("http://api.xydaili.net:2022/tools/ip.ashx"
       "?action=GetIP&protocol=1&qty=1&split=json&OrderNumber=你的订单号")
TARGET = "http://目标站点/page"

def fetch():
    for _ in range(3):                      # 最多换 3 条 IP
        r = requests.get(API, timeout=10).json()
        if r.get("status") != 200 or not r.get("data"):
            continue
        item = r["data"][0]
        proxy = "http://%s:%s" % (item["ip"], item["port"])
        try:
            resp = requests.get(TARGET, proxies={"http": proxy, "https": proxy}, timeout=15)
            if resp.status_code == 200:
                return resp.text
        except requests.RequestException:
            pass                            # 该条不可用,换下一条
    raise RuntimeError("重试多次仍失败")

print(fetch()[:200])

要点:每失败一次就重新提取,不要复用已经失效的 IP;把 qty 调大一次取多条、在本地排队使用,可以显著减少接口调用。

Scrapy(下载中间件)

class ProxyMiddleware:
    def __init__(self, api):
        self.api = api

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.settings.get("PROXY_API"))

    def process_request(self, request, spider):
        item = requests.get(self.api, timeout=10).json()["data"][0]
        request.meta["proxy"] = "http://%s:%s" % (item["ip"], item["port"])

把它加进 DOWNLOADER_MIDDLEWARES,并在 settings.py 里配置 PROXY_API。注意 RETRY_TIMES 和 DOWNLOAD_TIMEOUT 一起调,否则重试期间会一直用同一条失效 IP。

curl

curl -x "http://113.75.1.20:51008" -I "http://目标站点/" -m 15

# 账号密码模式(拼在代理地址里)
curl -x "http://用户名:密码@113.75.1.20:51008" "http://目标站点/" -m 15

Postman

打开 Settings → Proxy,把 Use custom proxy configuration 打开,Proxy Type 选 HTTP,Proxy Server 填提取到的 IP,Proxy Port 填对应端口,保存后直接发请求即可。调试时建议在 Postman 里用「Proxy」而不是在系统代理里改,避免影响其它软件。

Linux / 容器环境变量

export http_proxy="http://113.75.1.20:51008"
export https_proxy="http://113.75.1.20:51008"
# 让提取接口本身直连,不要走代理
export no_proxy="api.xydaili.net,localhost,127.0.0.1"

no_proxy 这一条很关键:很多人把提取接口也走了代理,代理一失效整条链路就断了——取 IP 的请求必须直连。

两种授权方式怎么选

方式适用场景配置要点
IP 白名单授权服务器出口 IP 固定、长期跑的采集任务先把出口 IP 加进白名单(白名单接口),代理地址直接用 ip:port,无需账号密码
账号密码授权多设备、出口 IP 会变、临时调试用提取返回里的 userName/pwd,代理写成 http://用户名:密码@ip:port

常见坑

  • HTTPS 目标站:HTTP 代理访问 https 目标是靠 CONNECT 隧道,requests / curl / Scrapy 都自动处理;如果自己手写 socket,需要先发 CONNECT。
  • 别把提取接口走代理:见上面 no_proxy。
  • 会话保持:带登录态的任务中途换 IP 会掉线,用 Cache=1&Cachetimems=... 固定同一批出口。
  • 频率:单 IP 每秒别超过 3 次请求,比堆线程更能降低封禁率。
  • 代理没生效:先 curl -x 单独验证这条代理,再回来看代码;浏览器里残留的代理配置也会干扰判断。

相关文档