在我的工作中,系统不允许我们在不使用代理的情况下发出 http 请求。然而,代理是通过创建一个 pypac 会话找到的。
如何在 aiohttp 会话中使用这个 pypac 会话来发出异步请求?
在我的工作中,系统不允许我们在不使用代理的情况下发出 http 请求。然而,代理是通过创建一个 pypac 会话找到的。
如何在 aiohttp 会话中使用这个 pypac 会话来发出异步请求?
所以,我发现答案是使用 pypac 会话来获取代理,然后您可以将其放入 aiohttp 请求中:
import asyncio
import aiohttp
import re
from pypac import PACSession, get_pac
pac = get_pac(url="https://somewebaddress.pac")
pac_session = PACSession(pac)
async def _fetch_async(session, url, proxy:bool=False):
#Get the proxy for this url
if proxy:
proxies = pac_session \
._get_proxy_resolver(pac) \
.get_proxy_for_requests(url)
match = re.search("^(\w*)", str(url))
proxy = proxies[match.group()]
else:
proxy = None
#Fetch with aiohttp session
async with session.request("get", url, proxy=proxy) as resp:
return resp
async def _fetch_all_async(urls):
tasks = []
async with aiohttp.ClientSession() as session:
for url in urls:
tasks.append(
_fetch_async(
session,
url
)
)
return await asyncio.gather(*tasks)
def request_all(self, urls:list=[]):
#Start the loop
loop = asyncio.get_event_loop()
#Gaher tasks and run
coro = _fetch_all_async(urls)
resps = loop.run_until_complete(coro)
return resps
希望这对任何受苦的人有所帮助。