Traceback (most recent call last):
File "E:\code\Python\.venv\smalltools\lib\site-packages\urllib3\connectionpool.py", line 696, in urlopen
self._prepare_proxy(conn)
File "E:\code\Python\.venv\smalltools\lib\site-packages\urllib3\connectionpool.py", line 964, in _prepare_proxy
conn.connect()
File "E:\code\Python\.venv\smalltools\lib\site-packages\urllib3\connection.py", line 359, in connect
conn = self._connect_tls_proxy(hostname, conn)
File "E:\code\Python\.venv\smalltools\lib\site-packages\urllib3\connection.py", line 496, in _connect_tls_proxy
return ssl_wrap_socket(
File "E:\code\Python\.venv\smalltools\lib\site-packages\urllib3\util\ssl_.py", line 432, in ssl_wrap_socket
ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls)
File "E:\code\Python\.venv\smalltools\lib\site-packages\urllib3\util\ssl_.py", line 474, in _ssl_wrap_socket_impl
return ssl_context.wrap_socket(sock)
File "C:\Users\Davy\AppData\Local\Programs\Python\python8\lib\ssl.py", line 500, in wrap_socket
return self.sslsocket_class._create(
File "C:\Users\Davy\AppData\Local\Programs\Python\python8\lib\ssl.py", line 1041, in _create
self.do_handshake()
File "C:\Users\Davy\AppData\Local\Programs\Python\python8\lib\ssl.py", line 1310, in do_handshake
self._sslobj.do_handshake()
OSError: [Errno 0] Error
Traceback (most recent call last):
File "C:\Users\Davy\AppData\Local\Programs\Python\python9\lib\site-packages\urllib3\connectionpool.py", line 696, in urlopen
self._prepare_proxy(conn)
File "C:\Users\Davy\AppData\Local\Programs\Python\python9\lib\site-packages\urllib3\connectionpool.py", line 964, in _prepare_proxy
conn.connect()
File "C:\Users\Davy\AppData\Local\Programs\Python\python9\lib\site-packages\urllib3\connection.py", line 359, in connect
conn = self._connect_tls_proxy(hostname, conn)
File "C:\Users\Davy\AppData\Local\Programs\Python\python9\lib\site-packages\urllib3\connection.py", line 496, in _connect_tls_proxy
return ssl_wrap_socket(
File "C:\Users\Davy\AppData\Local\Programs\Python\python9\lib\site-packages\urllib3\util\ssl_.py", line 432, in ssl_wrap_socket
ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls)
File "C:\Users\Davy\AppData\Local\Programs\Python\python9\lib\site-packages\urllib3\util\ssl_.py", line 474, in _ssl_wrap_socket_impl
return ssl_context.wrap_socket(sock)
File "C:\Users\Davy\AppData\Local\Programs\Python\python9\lib\ssl.py", line 500, in wrap_socket
return self.sslsocket_class._create(
File "C:\Users\Davy\AppData\Local\Programs\Python\python9\lib\ssl.py", line 1040, in _create
self.do_handshake()
File "C:\Users\Davy\AppData\Local\Programs\Python\python9\lib\ssl.py", line 1309, in do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1122)
好歹错误信息有点变化,于是按照最下面 ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1122) 去谷歌,并没有找到解决办法,但是发现有人在不久前遇到了相同的问题,并且通过降级 Python 3.7 解决了。
>>># 如果是 python 2,则是 from urllib import getproxies >>>fromurllib.requestimportgetproxies>>>getproxies(){'http':'http://127.0.0.1:7890','https':'https://127.0.0.1:7890','ftp':'ftp://127.0.0.1:7890'}
上面显示的结果就是对应到截图中的代理配置。
注意,urllib 和 urllib3 不是一个库,前者是 Python 标准库自带。
继续看代码:
1
2
3
4
5
6
7
8
9
10
elifos.name=='nt':defgetproxies():"""Return a dictionary of scheme -> proxy server URL mappings.
Returns settings gathered from the environment, if specified,
or the registry.
"""returngetproxies_environment()orgetproxies_registry()
在 Windows 系统中,先从环境变量获取,如果没有则从注册表获取。
getproxies_environment 的逻辑比较简单,基本和 Linux 系统是一致的,就是环境变量配置成啥样就是啥样。这里我并没有配置环境变量,自然结果是空,最终的结果要看 getproxies_registry。按照其中的代码,从注册表中获取的配置如下:
代码里有两个处理逻辑:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
proxyServer=str(winreg.QueryValueEx(internetSettings,'ProxyServer')[0])if'='inproxyServer:# Per-protocol settingsforpinproxyServer.split(';'):protocol,address=p.split('=',1)# See if address has a type:// prefixifnotre.match('(?:[^/:]+)://',address):address='%s://%s'%(protocol,address)proxies[protocol]=addresselse:# Use one setting for all protocolsifproxyServer[:5]=='http:':proxies['http']=proxyServerelse:proxies['http']='http://%s'%proxyServerproxies['https']='https://%s'%proxyServerproxies['ftp']='ftp://%s'%proxyServer