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