这通常是由于aiohttp默认使用CookieJar来管理cookie,而Requests不使用。为了解决这个问题,可以使用aiohttp.ClientSession来覆盖CookieJar。以下是示例代码:
import aiohttp
import requests
# 替换CookieJar
class CustomCookieJar(aiohttp.CookieJar):
def __init__(self, *, loop=None, unsafe=None, session=None):
super().__init__(loop=loop, unsafe=unsafe)
self._session = session
async def update_cookies(self, resp):
if resp.cookies:
jar = requests.cookies.RequestsCookieJar()
for name, value in resp.cookies.items():
jar.set(name, value)
self._session.cookies.update(jar)
await super().update_cookies(resp)
# 使用ClientSession
async def fetch(url):
async with aiohttp.ClientSession(cookie_jar=CustomCookieJar(session=requests.session())) as session:
async with session.get(url) as resp:
return await resp.text()
在这个示例中,我们定义了一个CustomCookieJar,它继承自aiohttp.CookieJar,但使用requests.cookies.RequestsCookieJar来管理cookie。然后,在使用aiohttp.ClientSession时,将CustomCookieJar作为cookie_jar参数传递。这样,在使用aiohttp时,就可以与使用Requests时一样处理cookie了。