
设置一次代理,单项目中,始终有效。
不需要改系统配置。
也不用重写 session ,或者说能重写之后形如 requests.get(xxx)地使用。不必实例化 session 传来传去。
1 frostming 2022 年 7 月 17 日 os.environ.update(HTTP_PROXY=<proxy_url>, HTTPS_PROXY=<proxy_url) |
2 nyxsonsleep OP @frostming 有没有更好点的方法呢。 设置了这个之后后续某几次需要再换代理的话,requests 里的 proxy 就无效了。 那样就需要 os.environ.update 两次。次数多了有点呆。 |
3 frostming 2022 年 7 月 17 日 @nyxsonsleep 设置了这个之后后续某几次需要再换代理的话,requests 里的 proxy 就无效了 不知这个结论如何得出,proxies 参数是优先于环境变量的,也就是会覆盖后者的值 https://requests.readthedocs.io/en/latest/user/advanced/#proxies:~:text=When%20the%20proxies,to%20your%20needs)%3A |
4 GoLand 2022 年 7 月 17 日 @nyxsonsleep 初始化一个 request.Session 实例当做全局变量不就得了。 |
5 nyxsonsleep OP @GoLand 可我就是不想要传全局变量 session 才来问的啊。 简单来说,就是在不改动已写了的大量 requests.get(xxx)的情况下。 最好是简单重写一下 requests 的什么类或者方法,做加法,不用大量替换原有的代码。 还要保证新 get post 等方法中的单独设置的 proxies 仍然有效 |
6 GoLand 2022 年 7 月 17 日 @nyxsonsleep 有比较花哨但是比较危险的做法,用 https://github.com/GrahamDumpleton/wrapt 这个把 requests.get 方法实现替换掉,如果没有传 proxies 参数就自把代理信息注入进去。 |
7 arischow 2022 年 7 月 17 日 自己再封装一层 |
8 frostming 2022 年 7 月 17 日 @nyxsonsleep 环境变量就是最优雅的办法,能满足你说的需求,你以为的结论是错的 |
9 luckyc 2022 年 7 月 17 日 自已封装一个函数啊不就行了吗? 所有的 http 请求都调自己的函数发起. |
10 GoLand 2022 年 7 月 17 日 |
11 404neko 2022 年 7 月 17 日 import socket import socks import requests ip = 'localhost' port = 1080 socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, ip, port) socket.socket = socks.socksocket |
12 ch2 2022 年 7 月 17 日 via iPhone 自己搞个单例模式 |