项目场景:
aiohttp 用代理IP访问提示 ‘NoneType’ object has no attribute ‘get_extra_info’
问题描述
# 定义异步函数,用于发送请求并获取结果
async def fetch(url, session, proxy, headers):
# 代理服务器的URL,格式为http://hostname:port
#proxy_url = 'http://username:password@proxy_address:proxy_port'
proxy_h1 = 'http://' + str(proxy['username']) + ':' + str(proxy['pwd']) + '@' + str(proxy['ip']) + ':' + str(proxy['port'])
print(proxy_h1,'proxy_h1proxy_h1proxy_h1')
async with session.get(url, proxy=proxy_h1, headers=headers) as response:
return await response.text()
# 定义异步函数,用于并发请求
async def main(urls, proxies, headers):
timeout = aiohttp.ClientTimeout(total=180)
connector = aiohttp.TCPConnector(limit=50 ,verify_ssl=False)
async with aiohttp.ClientSession(connector=connector, timeout=timeout, trust_env=True) as session:
tasks = [fetch(url, session, proxy, headers) for url, proxy in zip(urls, proxies)]
results = await asyncio.gather(*tasks)
# print(results,'resultsresultsresultsresults')
return results
原因分析:
试了半天发现是python aiohttp 源码有问题
解决方案:
python目录下/Lib\site-packages\aiohttp\ 找到 connector.py
# 注释如下行
#runtime_has_start_tls = self._loop_supports_start_tls()
# 新增
runtime_has_start_tls = False if req.proxy.scheme != "https" else self._loop_supports_start_tls()
ok 访问正常