Python如何按指定顺序串联两个代理发送HTTP请求
Python多层指定顺序代理请求实现方案
Python完全可以实现你要求的「客户端→带认证Socks5代理→HTTP代理→目标资源」的链式代理访问,以下是两种可落地的实现方案:
方案1:全局Socks5代理叠加requests配置(简单快速)
原理是通过PySocks替换进程默认的socket实现,让所有网络流量默认先走第一层Socks5代理,再通过requests的代理参数配置第二层HTTP代理,自动形成链式链路。
先安装依赖:pip install pysocks requests
代码示例:
import socks import socket import requests # 配置第一层带认证的Socks5代理为全局默认代理 socks.set_default_proxy( proxy_type=socks.SOCKS5, addr="socks5_host", port=1080, # 替换为你的Socks5端口 username="socks5_user", password="socks5_pass" ) # 替换系统默认socket实现 socket.socket = socks.socksocket # 配置第二层无需验证的HTTP代理 second_proxy = { "http": "http://http_proxy_host:port", "https": "http://http_proxy_host:port" } # 发送请求自动走两层代理,即可验证HTTP代理在Socks5网络环境下的可用性 try: response = requests.get("http://example.com", proxies=second_proxy, timeout=15) print(f"HTTP代理可用,响应状态码:{response.status_code}") except Exception as e: print(f"HTTP代理不可用,错误信息:{str(e)}")
注意:该方案会修改当前进程的全局网络配置,适合单场景验证使用,若进程内有其他不需要走代理的请求会受影响。
方案2:使用httpx原生链式代理(推荐,无全局污染)
httpx是新一代Python HTTP客户端,原生支持按顺序配置多层链式代理,不需要修改全局配置,灵活性更高。
先安装依赖:pip install httpx[socks]
代码示例:
import httpx # 按访问顺序配置代理列表,顺序和你要求的链路完全一致 proxy_chain = [ "socks5://socks5_user:socks5_pass@socks5_host:port", "http://http_proxy_host:port" ] try: with httpx.Client(proxies=proxy_chain, timeout=15) as client: response = client.get("http://example.com") print(f"HTTP代理可用,响应状态码:{response.status_code}") except Exception as e: print(f"HTTP代理不可用,错误信息:{str(e)}")
内容的提问来源于stack exchange,提问作者Martin Kroll
相关产品推荐
相关产品推荐

