問(wèn)題描述
在嘗試學(xué)習(xí)Flutter項(xiàng)目中的engine部分的源碼的時(shí)候,需要先進(jìn)行gclient sync操作來(lái)同步代碼,而由于某些不可說(shuō)的原因,會(huì)存在網(wǎng)絡(luò)無(wú)法訪問(wèn)的問(wèn)題,通常來(lái)講我們可以通過(guò)設(shè)置系統(tǒng)代理的方式來(lái)解決,然而gclient并不會(huì)使用macOS的系統(tǒng)代理設(shè)置,所以需要從gclient下手,由于gclient是由python實(shí)現(xiàn)的,所以我們可以使用下面提到的這一個(gè)trick。
另外這個(gè)技巧可以延伸到任意其他語(yǔ)言中,例如在go get ...操作中也遇到網(wǎng)絡(luò)問(wèn)題的話。
用詞說(shuō)明
目標(biāo)程序 : 我們需要使用代理的應(yīng)用程序
思路
修改urllib.py或者socket.py文件,這里可能需要注意下目標(biāo)程序的具體實(shí)現(xiàn)是使用urllib還是socket,對(duì)于使用代理有基本的認(rèn)識(shí)的可以很容易理解這一點(diǎn),另外需要注意的一點(diǎn)是,如果修改下面提到的文件的話,會(huì)對(duì)系統(tǒng)中任何使用到該python運(yùn)行時(shí)的其他程序產(chǎn)生影響,當(dāng)然這個(gè)問(wèn)題可以通過(guò)安裝多個(gè)python運(yùn)行時(shí)來(lái)規(guī)避,使用pyenv或者類似的工具實(shí)現(xiàn)起來(lái)很方便。
使用PySocks,可以通過(guò)
pip install --user PySocks安裝PySocks,當(dāng)然這里也可以使用其他的package或者自己實(shí)現(xiàn)等等
然后如下修改,記住在修改之前備份要修改的文件,這是一個(gè)好習(xí)慣
如果修改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地址和端口號(hào)可以修改成自己的設(shè)置
- 注意使用的python版本,不要弄錯(cuò)了上述文件的位置
參考(Reference)
https://stackoverflow.com/questions/2317849/how-can-i-use-a-socks-4-5-proxy-with-urllib2