问题描述
在尝试学习Flutter
项目中的engine
部分的源码的时候,需要先进行gclient sync
操作来同步代码,而由于某些不可说的原因,会存在网络无法访问的问题,通常来讲我们可以通过设置系统代理的方式来解决,然而gclient
并不会使用macOS的系统代理设置,所以需要从gclient下手,由于gclient是由python实现的,所以我们可以使用下面提到的这一个trick。
另外这个技巧可以延伸到任意其他语言中,例如在go get ...
操作中也遇到网络问题的话。
用词说明
目标程序 : 我们需要使用代理的应用程序
思路
修改urllib.py或者socket.py文件,这里可能需要注意下目标程序的具体实现是使用urllib还是socket,对于使用代理有基本的认识的可以很容易理解这一点,另外需要注意的一点是,如果修改下面提到的文件的话,会对系统中任何使用到该python运行时的其他程序产生影响,当然这个问题可以通过安装多个python运行时来规避,使用pyenv或者类似的工具实现起来很方便。
使用PySocks,可以通过
pip install --user PySocks
安装PySocks,当然这里也可以使用其他的package或者自己实现等等
然后如下修改,记住在修改之前备份要修改的文件,这是一个好习惯
如果修改urllib.py的话
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 1080)
socket.socket = socks.socksocket
如果修改socket.py的话
socket = SocketType = _socketobject # 在socket.py找到这一行
# 在下面添加下面的代码
import socks
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 1080)
socket = socks.socksocket
- 代理的IP地址和端口号可以修改成自己的设置
- 注意使用的python版本,不要弄错了上述文件的位置
参考(Reference)
https://stackoverflow.com/questions/2317849/how-can-i-use-a-socks-4-5-proxy-with-urllib2