在使用aiohttp进行异步HTTPS请求时,如何解决第7个SSL问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计518个文字,预计阅读时间需要3分钟。
前言:默认情况下,aiohttp对HTTPS协议使用严格的证书检查。有些同学在电脑上请求HTTPS请求可能会遇到ssl.SSLCertVerificationError错误:[SSL: CERTIFICATE_VERIFY_FAILED] SLL证书校验失败。当访问一个HTTPS请求时,import导致错误。
解决方案:请确保你的系统已正确配置了SSL证书,或者修改aiohttp的配置以跳过证书验证。以下是修改方法:
pythonimport aiohttpimport asyncio
创建一个aiohttp客户端实例,跳过证书验证async def fetch(session, url): async with session.get(url) as response: return await response.text()
主函数async def main(): # 创建aiohttp客户端实例 async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False)) as session: # 请求一个HTTPS URL=await fetch(session, https://www.example.com) print()
运行主函数asyncio.run(main())
前言
默认情况下, aiowww.***.com/yoyoketang/') as resp:
print(resp.url)
print(await resp.read())
# asyncio.run(main()) # 会报错,改成下面2句
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
如果出现SSL证书校验问题:ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED]
只需加一个将 ssl 参数设置为来忽略认证检查 ssl=False
async with aiowww.***.com/yoyoketang/', ssl=False) as resp:传本地证书
如果你本地有ssl证书,证书地址为/path/to/ca-bundle.crt, 可以传本地证书
sslcontext = ssl.create_default_context(cafile='/path/to/ca-bundle.crt')
r = await session.get('example.com', ssl=sslcontext)
如果您需要验证自签名ssl.SSLContext.load_cert_chain()证书,您可以执行与上一个示例相同的操作,但使用密钥对添加另一个调用 :
cafile='/path/to/ca-bundle.crt')
sslcontext.load_cert_chain('/path/to/client/public/device.pem',
'/path/to/client/private/device.key')
r = await session.get('example.com', ssl=sslcontext)
在 ClientSession 设置忽略证书
我们也可以在创建ClientSession 会话的时候设置ssl=False全局参数
conn = aiowww.cnblogs.com/yoyoketang/') as resp:print(resp.url)
print(await resp.read())
verify_ssl=False
早期的版本会看到verify_ssl=False
conn = aiowww.cnblogs.com/yoyoketang/') as resp:print(resp.url)
print(await resp.read())
此时会有警告,提示我们用最新的语法ssl=False代替原来的'verify_ssl=False`
DeprecationWarning: verify_ssl is deprecated, use ssl=False insteadconn = aiohttp.TCPConnector(verify_ssl=False)
本文共计518个文字,预计阅读时间需要3分钟。
前言:默认情况下,aiohttp对HTTPS协议使用严格的证书检查。有些同学在电脑上请求HTTPS请求可能会遇到ssl.SSLCertVerificationError错误:[SSL: CERTIFICATE_VERIFY_FAILED] SLL证书校验失败。当访问一个HTTPS请求时,import导致错误。
解决方案:请确保你的系统已正确配置了SSL证书,或者修改aiohttp的配置以跳过证书验证。以下是修改方法:
pythonimport aiohttpimport asyncio
创建一个aiohttp客户端实例,跳过证书验证async def fetch(session, url): async with session.get(url) as response: return await response.text()
主函数async def main(): # 创建aiohttp客户端实例 async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False)) as session: # 请求一个HTTPS URL=await fetch(session, https://www.example.com) print()
运行主函数asyncio.run(main())
前言
默认情况下, aiowww.***.com/yoyoketang/') as resp:
print(resp.url)
print(await resp.read())
# asyncio.run(main()) # 会报错,改成下面2句
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
如果出现SSL证书校验问题:ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED]
只需加一个将 ssl 参数设置为来忽略认证检查 ssl=False
async with aiowww.***.com/yoyoketang/', ssl=False) as resp:传本地证书
如果你本地有ssl证书,证书地址为/path/to/ca-bundle.crt, 可以传本地证书
sslcontext = ssl.create_default_context(cafile='/path/to/ca-bundle.crt')
r = await session.get('example.com', ssl=sslcontext)
如果您需要验证自签名ssl.SSLContext.load_cert_chain()证书,您可以执行与上一个示例相同的操作,但使用密钥对添加另一个调用 :
cafile='/path/to/ca-bundle.crt')
sslcontext.load_cert_chain('/path/to/client/public/device.pem',
'/path/to/client/private/device.key')
r = await session.get('example.com', ssl=sslcontext)
在 ClientSession 设置忽略证书
我们也可以在创建ClientSession 会话的时候设置ssl=False全局参数
conn = aiowww.cnblogs.com/yoyoketang/') as resp:print(resp.url)
print(await resp.read())
verify_ssl=False
早期的版本会看到verify_ssl=False
conn = aiowww.cnblogs.com/yoyoketang/') as resp:print(resp.url)
print(await resp.read())
此时会有警告,提示我们用最新的语法ssl=False代替原来的'verify_ssl=False`
DeprecationWarning: verify_ssl is deprecated, use ssl=False insteadconn = aiohttp.TCPConnector(verify_ssl=False)

