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

如何在Python中使用带身份验证的SOCKS5代理发送网络请求及下载文件

Python全局使用带认证SOCKS5代理实现方案

以下两种方案可按需选择,推荐方案2,和Telegram全局代理效果一致,所有网络操作都会自动走代理。

方案1:环境变量配置(适配大部分标准请求库)

绝大多数Python网络库(requests、urllib、urllib3等)会自动读取系统代理环境变量,只需在代码最开头配置对应环境变量即可:

import os

# 替换为实际代理信息
PROXY_HOST = "192.168.1.100" # 你的代理主机地址
PROXY_PORT = "1080" # 代理端口
PROXY_USER = "user" # 代理用户名
PROXY_PASS = "passwd" # 代理密码

proxy_addr = f"socks5://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
os.environ["ALL_PROXY"] = proxy_addr
os.environ["HTTP_PROXY"] = proxy_addr
os.environ["HTTPS_PROXY"] = proxy_addr

注意:该方案仅对读取系统环境变量的请求库生效,自定义socket实现的第三方库不会走代理。

方案2:socket全局补丁(真正全局生效,适配所有基于标准socket的请求)

该方案直接替换Python底层默认socket实现,所有基于标准socket的网络通信(包括请求库、下载工具、爬虫框架等)都会自动走代理,和Telegram的全局代理效果完全一致。
首先安装依赖:
pip install PySocks

然后在所有网络请求代码执行前,添加以下配置:

import socket
import socks

# 替换为实际代理信息
PROXY_HOST = "192.168.1.100" # 你的代理主机地址
PROXY_PORT = 1080 # 代理端口,数字类型
PROXY_USER = "user" # 代理用户名
PROXY_PASS = "passwd" # 代理密码

socks.set_default_proxy(
    socks.SOCKS5,
    PROXY_HOST,
    PROXY_PORT,
    username=PROXY_USER,
    password=PROXY_PASS
)
# 替换默认socket实现
socket.socket = socks.socksocket

配置验证

配置完成后可以通过IP查询接口验证代理是否生效:

import requests
# 该接口返回当前访问的出口IP
resp = requests.get("https://api.ipify.org")
print(f"当前出口IP:{resp.text}")

如果输出IP为代理服务器的IP,说明配置生效。

注意事项

  • 所有代理配置代码必须放在所有网络请求相关代码的最前面,否则提前初始化的网络连接不会走代理
  • 异步网络库(如aiohttp)不兼容socket补丁方案,可在创建ClientSession时手动传入代理url参数
  • 不要同时启用两种配置方案,避免出现代理冲突导致请求失败

内容的提问来源于stack exchange,提问作者a-m-h-t

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:54:05