解決python異步框架aiohttp無(wú)法使用本地代理問(wèn)題
問(wèn)題
- aiohttp 在全局代理模式下無(wú)法訪問(wèn)墻外的網(wǎng)址,而requests可以
- aiohttp不支持https代理,無(wú)論訪問(wèn)的網(wǎng)址是http還是https,使用代理是字符串proxy='http://127.0.0.1:10080'
import aiohttp
import asyncio
headers = {
'User-Agent': "mozilla/5.0 (windows nt 6.1; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/69.0.3494.0 safari/537.36",
}
async def fetch(session,url):
async with session.get(url=url,headers=headers,timeout=50,verify_ssl=False,proxy='http://127.0.0.1:10080') as resposne:
print(resposne.status)
return await resposne.text()
async def main():
async with aiohttp.ClientSession() as session:
url='https://www.google.com'
html = await fetch(session,url)
print(html)
loop = asyncio.get_event_loop()
loop.run_until_complete(main()) - 當(dāng)session.get里面不傳入proxy時(shí)
- 會(huì)根據(jù)ClientSession里面的一個(gè)參數(shù)叫trust_env是否為T(mén)rue來(lái)使用本地代理
- 但源碼中的使用條件是
elif self._trust_env:
for scheme, proxy_info in proxies_from_env().items():
if scheme == url.scheme:
proxy = proxy_info.proxy
proxy_auth = proxy_info.proxy_auth
break- scheme == url.scheme 這個(gè)條件阻擋了請(qǐng)求https網(wǎng)址
- aiohttp不支持https代理
- 所以這是一個(gè)矛盾的地方
解決方式1
- 修改源碼
- 對(duì)scheme == url.scheme這個(gè)條件進(jìn)行修改
- 并且在aiohttp.ClientSession(trust_env=True)傳入trust_env=True
- 這種方式不提倡
解決方式2
- 獲取本地代理
- 然后在沒(méi)有代理時(shí)在session.get使用本地代理
def get_local_proxy():
from urllib.request import getproxies
proxy = getproxies()['http']
#proxies = {'http': 'http://127.0.0.1:10809', 'https': 'http://127.0.0.1:10809'}
proxies = {'http': proxy , 'https': proxy}
return proxies總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python3監(jiān)控CentOS磁盤(pán)空間腳本
這篇文章主要為大家詳細(xì)介紹了Python3監(jiān)控CentOS磁盤(pán)空間腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
Django原生sql也能使用Paginator分頁(yè)的示例代碼
這篇文章主要介紹了Django原生sql也能使用Paginator分頁(yè)的示例代碼,主要使用了count和__getslice__,有興趣的可以了解一下2017-11-11
python實(shí)現(xiàn)郵件自動(dòng)發(fā)送
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)郵件自動(dòng)發(fā)送,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
python3 BeautifulSoup模塊使用字典的方法抓取a標(biāo)簽內(nèi)的數(shù)據(jù)示例
這篇文章主要介紹了python3 BeautifulSoup模塊使用字典的方法抓取a標(biāo)簽內(nèi)的數(shù)據(jù),結(jié)合實(shí)例形式Fenix了python3 BeautifulSoup模塊進(jìn)行數(shù)據(jù)的抓取相關(guān)操作技巧,需要的朋友可以參考下2019-11-11
Python如何通過(guò)手肘法實(shí)現(xiàn)k_means聚類詳解
K-means聚類算法是一種常見(jiàn)的無(wú)監(jiān)督學(xué)習(xí)算法,用于將數(shù)據(jù)集分成k個(gè)不同的簇,下面這篇文章主要給大家介紹了關(guān)于Python如何通過(guò)手肘法實(shí)現(xiàn)k_means聚類的相關(guān)資料,需要的朋友可以參考下2023-04-04
numpy使用技巧之?dāng)?shù)組過(guò)濾實(shí)例代碼
這篇文章主要介紹了numpy使用技巧之?dāng)?shù)組過(guò)濾實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02
jupyter notebook保存文件默認(rèn)路徑更改方法匯總(親測(cè)可以)
安裝Anaconda后,新建文件的默認(rèn)存儲(chǔ)路徑一般在C系統(tǒng)盤(pán),那么路徑是什么呢?如何更改jupyter notebook保存文件默認(rèn)路徑呢?今天小編就這一問(wèn)題通過(guò)兩種方法給大家講解,需要的朋友跟隨小編一起看看吧2021-06-06
Python實(shí)現(xiàn)獲取某天是某個(gè)月中的第幾周
這篇文章主要介紹了Python實(shí)現(xiàn)獲取某天是某個(gè)月中的第幾周,本文代碼實(shí)現(xiàn)獲取指定的某天是某個(gè)月中的第幾周、周一作為一周的開(kāi)始,需要的朋友可以參考下2015-02-02

