如何讓任意python程序使用socks代理

問(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)用程序

思路

  1. 修改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)很方便。

  2. 使用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   
  1. 代理的IP地址和端口號(hào)可以修改成自己的設(shè)置
  2. 注意使用的python版本,不要弄錯(cuò)了上述文件的位置

參考(Reference)

https://stackoverflow.com/questions/2317849/how-can-i-use-a-socks-4-5-proxy-with-urllib2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容