从修改底层源码实现!Python设置全局代理并配置代理白名单 支持Socks5和HTTP等

实现思路

要实现Python的全局代理,其实就是对底层socket设置代理,而python的PySocks就可以实现修改底层socket,在连接的时候进行对目标代理服务器握手,所以从PySocks入手,通过修改PySocks代码从而实现设置代理白名单,黑名单等自由扩展

实现过程

1.pip安装PySocks

	pip install PySocks

2.找到socks.py

方法一:在Python目录下的\Lib\site-packages
方法二:使用PyCharm 随便创建一个py文件 import socks,然后Ctrl+鼠标左键点进去,右键选择 Show in Explorer
在这里插入图片描述
找到之后,复制一份socks.py到自己的项目中,修改为my_socks.py(当然也可以修改为其他的名字)

3.修改my_socks.py

1)随便找一个空白处添加设置白名单代码

white_set = set()
def set_white_list(white_list):
    global white_set
    if white_list:
        white_set = set(white_list)
    else:
        white_set.clear()

2)修改连接设置->找到socksocket类中的connect方法
找到以下代码块

        if proxy_type is None:
            # Treat like regular socket object
            self.proxy_peername = dest_pair
            super(socksocket, self).settimeout(self._timeout)
            super(socksocket, self).connect((dest_addr, dest_port))
            return

修改为:

        if dest_addr in white_set:
            print("识别到白名单")
            proxy_type = None
        if proxy_type is None:
            # Treat like regular socket object
            self.proxy_peername = dest_pair
            super(socksocket, self).settimeout(self._timeout)
            super(socksocket, self).connect((dest_addr, dest_port))
            return

验证结果

编写测试代码

my_socks.set_default_proxy(proxy_type=socks.SOCKS5, addr="****", port=****,
                               username="****",
                               password="****")
my_socks.set_white_list(['109.244.80.147'])
socket.socket = my_socks.socksocket
r = requests.get("http://pv.sohu.com/cityjson?ie=utf-8")
print("当前IP", r.text)
my_socks.set_white_list(None)
r = requests.get("http://pv.sohu.com/cityjson?ie=utf-8")
print("当前IP", r.text)

测试结果
在这里插入图片描述
未经作者允许禁止转载

Python配置socks5代理以便实现全局代理功能,可以大大增强网络请求的灵活性安全性。为了帮助你更深入地掌握这一技术,这里推荐一份资源:《Python中使用socks5设置全局代理的方法示例》。该资源通过具体的代码示例,详细介绍了如何配置使用socks5代理。 参考资源链接:[Python中使用socks5设置全局代理的方法示例](https://wenku.youkuaiyun.com/doc/645cd98695996c03ac3f8c15?spm=1055.2569.3001.10343) 首先,你需要安装一个支持socks5协议的代理库,比如`PySocks`(也称`socks`)。你可以通过pip安装它: ``` pip install PySocks ``` 接着,在Python代码中设置全局代理。这可以通过修改系统环境变量或者使用第三方库来实现。以下是使用环境变量设置全局代理的示例: ```python import os import requests # 设置socks5代理 os.environ['HTTP_PROXY'] = 'socks5h://user:password@***.*.*.*:1080' os.environ['HTTPS_PROXY'] = 'socks5h://user:password@***.*.*.*:1080' # 测试代理是否配置成功 response = requests.get('***') print(response.text) ``` 在这个示例中,`socks5h`表示使用socks5协议的代理且带有身份验证信息。`user:password`是代理服务器的用户名密码,`***.*.*.*:1080`是本地运行的socks5代理服务器地址端口。 为了更优雅地管理全局代理,可以考虑使用`requests`的高级功能,如`proxies`字典,或者第三方库如`PySocks`提供的`set_global_proxy`方法。 通过上述步骤,你就可以为所有基于requests库的网络请求设置全局代理了。如果你需要对这一技术进行更深入的研究,推荐阅读《Python中使用socks5设置全局代理的方法示例》。这份资料将为你提供更详细的操作指南多种使用场景,帮助你在网络安全网络请求方面达到新的水平。 参考资源链接:[Python中使用socks5设置全局代理的方法示例](https://wenku.youkuaiyun.com/doc/645cd98695996c03ac3f8c15?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值