You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Python的所有流量通过SOCKS代理?

如何让Python所有流量通过SOCKS代理(基于SSH隧道)

首先通过SSH命令建立本地SOCKS5代理隧道,在终端执行:

ssh -D 5005 user@server

如果需要让SSH在后台运行,避免关闭终端后代理断开,可以添加参数:

ssh -fN -D 5005 user@server

以上命令会在本地127.0.0.1:5005创建一个SOCKS5代理,所有发往该端口的流量都会通过SSH隧道转发到目标服务器。

下面提供几种让Python流量走该SOCKS代理的方法:

1. 全局代理设置(所有Python网络请求自动走代理)

这种方式会让所有基于socket的Python网络库(urllib、requests等)自动使用SOCKS代理,无需单独配置。

首先安装依赖库:

pip install python-socks

然后在代码中配置:

import python_socks
import socket

# 配置默认SOCKS代理
python_socks.set_default_proxy(
    proxy_type=python_socks.ProxyType.SOCKS5,
    host='127.0.0.1',
    port=5005
)

# 替换系统socket,让所有网络请求走代理
socket.socket = python_socks.socksocket

# 测试示例:用urllib获取当前IP
from urllib.request import urlopen
response = urlopen('https://httpbin.org/ip')
print(response.read().decode())

2. 仅让requests库使用代理

如果不想全局修改,只想让requests请求走代理,可按以下步骤操作:

先安装支持SOCKS的requests扩展:

pip install requests[socks]

然后在请求时指定代理:

import requests

proxies = {
    'http': 'socks5://127.0.0.1:5005',
    'https': 'socks5://127.0.0.1:5005'
}

# 发送请求
response = requests.get('https://httpbin.org/ip', proxies=proxies)
print(response.json())

3. 仅让urllib库使用代理

针对urllib单独配置代理,无需全局修改:

from urllib.request import build_opener, ProxyHandler, urlopen, install_opener

# 创建代理处理器
proxy_handler = ProxyHandler({
    'http': 'socks5://127.0.0.1:5005',
    'https': 'socks5://127.0.0.1:5005'
})
# 构建带代理的opener
opener = build_opener(proxy_handler)

# 可选:将该opener设为全局,后续urllib请求默认使用
install_opener(opener)

# 测试请求
response = urlopen('https://httpbin.org/ip')
print(response.read().decode())

内容的提问来源于stack exchange,提问作者Win Myo Htet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 05:26:03