0%

python获取服务器代理信息

hello 大家好我是Monday,今天给大家带来一篇关于python代码自动获取服务器代理信息的文章。

1、背景:

最近在写websocket数据实时拦截服务时,技术用的mitmproxy挂的本地全局代理 ,拦截数据,服务器(windows)

,在写完服务时,我这边还有几个抓取的代码程序,由于服务器设置的代理,所以在请求网站时需要加上代理,写死配置如

{‘http’: ‘http://127.0.0.1:7890‘, ‘https’: ‘https://127.0.0.1:7890‘, ‘ftp’: ‘ftp://127.0.0.1:7890’}

,有没有一种方式来自动获取服务器的配置呢?

2、获取方式一

(1)API文档

https://docs.python.org/zh-cn/3/library/winreg.html

(2)代码展示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# coding=utf-8
import winreg


# 处理代理服务器

class ProxyServer:

def __init__(self):
self.__path = r'Software\Microsoft\Windows\CurrentVersion\Internet Settings'
self.__INTERNET_SETTINGS = winreg.OpenKeyEx(winreg.HKEY_CURRENT_USER,
self.__path, 0, winreg.KEY_ALL_ACCESS)

def get_server_form_Win(self):
"""获取代理配置的ip和端口号"""
ip, port = "", ""
if self.is_open_proxy_form_Win():
try:
ip, port = winreg.QueryValueEx(self.__INTERNET_SETTINGS, "ProxyServer")[0].split(":")
print("获取到代理信息:{}:{}".format(ip, port))
except FileNotFoundError as err:
print("没有找到代理信息:" + str(err))
except Exception as err:
print("有其他报错:" + str(err))
else:
print("系统没有开启代理")
return ip, port

def is_open_proxy_form_Win(self):
"""判断是否开启了代理"""
try:
if winreg.QueryValueEx(self.__INTERNET_SETTINGS, "ProxyEnable")[0] == 1:
return True
except FileNotFoundError as err:
print("没有找到代理信息:" + str(err))
except Exception as err:
print("有其他报错:" + str(err))
return False


if __name__ == '__main__':
ps = ProxyServer()
print(ps.get_server_form_Win())
print(ps.is_open_proxy_form_Win())
(3)测试运行结果如下:
没加代理的情况下
1
2
3
系统没有开启代理
('', '')
False
开启代理
1
2
3
获取到代理信息:127.0.0.1:7890
('127.0.0.1', '7890')
True

(4)原理介绍

【Windows修改代理注册表位置】

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings

【这个表下面有三个值】

ProxyEnable:表示当前电脑是否开启了代理?1:开启、0:关闭
ProxyServer:代理服务器的IP和端口
ProxyOverride:不代理的ip,一般是本地
【注意】

如果电脑从未使用过代理工具,从未设置过代理,则不会有ProxyEnable这个key的

下面是在 Windows 10 中打开注册表编辑器的两种方法:
  1. 在任务栏上的搜索框中,键入regedit,然后选择”注册表编辑器 (桌面应用) 结果。
  2. 右键单击”开始”, 然后选择”运行”。“打开:”框中键入 regedit,然后选择”确定“。

3、获取方式二

1
2
3
import urllib.request
request = urllib.request.getproxies()
print(request)

这个也是我是用的方式,linux和windows通吃

通过以上的放我,我们代码就可以自由切换是否使用代理了

结束语

​ 今天的分享就到这里了,欢迎大家关注微信公众号”菜鸟童学