python - 我如何将 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
希望这对任何受苦的人有所帮助。
推荐阅读
- javascript - 检测给定的三个单词字符串中的连字符模式
- python - 如何绕过 Instagram 解析保护?
- javascript - 拆分字符串包含 html 标签
- rust - 铸造钢筋混凝土
到 Rc - python-3.x - 带有 CLI 实用程序的私有仓库中的 Python 包 - 如何部署、使用和构建
- javascript - 输入中的特殊字符以 %nn 形式出现
- javascript - 无法理解 Redux-Saga 中的非阻塞调用
- algorithm - 合并排序算法合并功能不起作用
- vue.js - Axios PUT 对 DRF Api 的请求通过,但未更新
- aws-cdk - 如何在 aws cdk 中使用自定义资源将文件上传到 s3 存储桶