type
Post
status
Published
date
Oct 11, 2025
slug
akshare-proxy-config-guide
summary
本文从底层原理讲解如何为akshare这种量化交易工具配置代理,极易迁移到其他场景。
tags
推荐
工具
Doiiars
超级初学者
Python
category
知行合一
icon
password
一、akshare 的网络依赖
akshare 的核心网络库依赖:
关键问题:
requests默认读取HTTP_PROXY环境变量 ✓
aiohttp默认 不读取 环境变量 ✗
这导致仅设置环境变量,akshare 的异步接口可能无法走代理。
二、分步配置策略
2.1 针对 requests 部分(环境变量即可)
akshare 中使用
requests 的接口,只需设置环境变量:Windows 系统设置环境变量:
Linux/Mac 系统:
验证是否生效:
2.2 针对 aiohttp 部分(需要额外配置)
如果 akshare 的某些接口使用了
aiohttp,仅设置环境变量不够,需要以下方案。三、完整解决方案
方案 1:Monkey-patch aiohttp(最简单)
原理: 在导入 akshare 前,修改 aiohttp 的默认行为。
优点: 5 行代码,无需修改源码,对 requests 和 aiohttp 都生效。
方案 2:PySocks 全局代理
原理: 直接代理 Python 的 socket 层,所有网络库自动生效。
安装:
pip install PySocks优点: 最底层方案,对所有网络库生效。
方案 3:系统级代理工具
Linux/Mac: proxychains
Windows: Proxifier
图形化工具,设置规则后所有程序自动走代理。
优点: 无需改代码,适合频繁切换代理。
三、网络原理深入
3.1 网络请求的层次结构
代理可以在任一层实现:
层次 | 方案 | 优点 | 缺点 |
应用层 | 修改 akshare 源码 | 精确控制 | 需要维护代码 |
HTTP 库层 | 环境变量 + trust_env | 标准做法 | aiohttp 需要额外设置 |
Socket 层 | PySocks | 全局生效 | 可能影响其他程序 |
系统层 | proxychains / Proxifier | 透明代理 | 依赖外部工具 |
3.2 为什么 aiohttp 默认不信任环境变量?
历史原因: aiohttp 设计之初,
trust_env=False 是为了:- 避免意外的代理行为
- 更明确的配置方式
- 安全考虑(防止环境变量污染)
但这与
requests、httpx 等库的默认行为不一致,导致用户困惑。社区讨论: aiohttp issue #10682 建议修改默认值为
True,但尚未合并。3.3 Socket 层代理的工作原理
关键优势: 在最底层拦截,对上层透明,无需修改任何代码。
四、方案选择建议
决策流程
- 先测试环境变量(针对 requests)
- 如果 akshare 接口都能正常工作 → 完成 ✓
- 如果部分接口超时 → 说明用了 aiohttp,继续下一步
- 选择 aiohttp 代理方案
场景 | 推荐方案 |
快速测试 | 方案 1(Monkey-patch) |
生产环境 | 方案 2(PySocks) |
本地开发 | 方案 3(系统工具) |
Docker 部署 | 环境变量 + Monkey-patch |
多项目共用 | 系统级代理 |
五、验证代理是否生效
总结
- 分步配置:
- requests 部分:设置环境变量即可
- aiohttp 部分:需要额外配置
- 最简方案: 先测试环境变量,不够再 Monkey-patch
- 最彻底方案: PySocks 代理 socket 层,一劳永逸
- 原理: 代理可以在网络栈的任一层实现
先简单后复杂,能用环境变量就不用写代码。
- 作者:Doiiars
- 链接:http://doiiars.com/article/akshare-proxy-config-guide
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章


