在使用aiohttp进行异步HTTPS请求时,如何解决第7个SSL问题?

2026-05-28 19:022阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计518个文字,预计阅读时间需要3分钟。

在使用aiohttp进行异步HTTPS请求时,如何解决第7个SSL问题?

前言:默认情况下,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()证书,您可以执行与上一个示例相同的操作,但使用密钥对添加另一个调用 :

在使用aiohttp进行异步HTTPS请求时,如何解决第7个SSL问题?

sslcontext = ssl.create_default_context(
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 instead
conn = aiohttp.TCPConnector(verify_ssl=False)




本文共计518个文字,预计阅读时间需要3分钟。

在使用aiohttp进行异步HTTPS请求时,如何解决第7个SSL问题?

前言:默认情况下,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()证书,您可以执行与上一个示例相同的操作,但使用密钥对添加另一个调用 :

在使用aiohttp进行异步HTTPS请求时,如何解决第7个SSL问题?

sslcontext = ssl.create_default_context(
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 instead
conn = aiohttp.TCPConnector(verify_ssl=False)