在 Python 的 requests 库中,使用代理服务器可以让你通过不同的网络路由发送 HTTP 请求。代理服务器可以帮助隐藏真实 IP 地址、绕过地理限制或进行负载均衡等操作。

什么是代理?

代理服务器是一种中间服务器,它位于客户端(你的代码)和目标服务器(你要请求的服务器)之间。使用代理服务器,你的请求会首先发送到代理,然后代理再将请求转发给目标服务器,目标服务器的响应也会通过代理返回给你。

代理的使用在数据抓取、访问受限网站、提高隐私保护等场景中非常有用。

在 requests 中使用代理

requests 支持HTTP、HTTPS、SOCKS等代理请求;

使用HTTP、HTTPS代理

如果要使用 HTTP 代理或 HTTPS 代理,你可以在任意请求方法中传入proxies参数来配置单个请求:

import requests

proxies = {
  "http": "http://proxy1:8080",
  "https": "https://proxy2.com:8080",
}

#带身份验证的格式
proxies2 = {
    'http': 'http://user:password@proxy.example.com:8080',
    'https': 'https://user:password@proxy.example.com:8080',
}

response = requests.get("http://example.org", proxies=proxies)

在这个例子中,http 请求将通过http://proxy1:8080发送,https 请求将通过https://proxy2.com:8080发送;

通过环境变量设置代理

除了在代码中明确传递proxies参数,还可以通过环境变量配置代理,requests 库会自动读取这些环境变量并应用代理设置。

Windows 环境变量设置命令

set HTTP_PROXY=http://proxy.example.com:8080
set HTTPS_PROXY=https://proxy.example.com:8080

Linux、macOS 环境变量设置命令

export http_proxy=http://proxy.example.com:8080
export https_proxy=https://proxy.example.com:8080

使用SOCKS代理

requests 支持 SOCKS 协议的代理功能;这是一个可选功能,如果你要使用,需要进行安装:

pip install requests[socks]

在用法上和 HTTP、HTTPS 代理没有太大区别;

proxies = {
    'http': 'socks5://user:password@proxy.example.com:1080',
    'https': 'socks5://user:password@proxy.example.com:1080',
}

代理池

如果你需要频繁更换代理以避免被网站屏蔽,可以创建一个代理池,并随机选择代理。示例代码如下:

import requests
import random

proxies_list = [
    {'http': 'http://proxy1.example.com:8080', 'https': 'http://proxy1.example.com:8080'},
    {'http': 'http://proxy2.example.com:8080', 'https': 'http://proxy2.example.com:8080'},
    {'http': 'http://proxy3.example.com:8080', 'https': 'http://proxy3.example.com:8080'},
]

proxies = random.choice(proxies_list)

response = requests.get('https://httpbin.org/ip', proxies=proxies)