鱼C论坛

 找回密码
 立即注册
查看: 2152|回复: 7

[已解决]PYTHON中aiohttp库的问题

[复制链接]
发表于 2023-7-1 09:04:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 python小小白哟 于 2023-7-1 09:05 编辑

代码如下:
import aiohttp
import asyncio

async def fetch(session,url):
    async with session.get(url) as response:
        return await response.text(), response.status

async def main():
    async with aiohttp.ClientSession() as session:
        html,status = await fetch(session,'https://cuiqingcai.com')
        print(f'html:{html[:100]}...')
        print(f'status:{status}')

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

然后就报错了:
aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host cuiqingcai.com:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)')]

怎么忽略证书错误呢?
最佳答案
2023-7-1 09:06:52
要忽略证书错误,你可以在创建 ClientSession 时传递 trust_env=False 参数,并使用 ssl=False 参数来禁用SSL验证。修改你的代码如下所示:
import aiohttp
import asyncio

async def fetch(session,url):
    async with session.get(url) as response:
        return await response.text(), response.status

async def main():
    connector = aiohttp.TCPConnector(ssl=False)
    async with aiohttp.ClientSession(connector=connector, trust_env=False) as session:
        html,status = await fetch(session,'https://cuiqingcai.com')
        print(f'html:{html[:100]}...')
        print(f'status:{status}')

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

这样修改后,代码将禁用SSL验证,从而忽略证书错误。请注意,这样做可能会降低安全性,并且不建议在生产环境中使用。仅在特定的开发或测试场景下使用此功能。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-1 09:04:52 | 显示全部楼层
你需要问什么问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 09:05:53 | 显示全部楼层
你要问什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 09:06:52 | 显示全部楼层    本楼为最佳答案   
要忽略证书错误,你可以在创建 ClientSession 时传递 trust_env=False 参数,并使用 ssl=False 参数来禁用SSL验证。修改你的代码如下所示:
import aiohttp
import asyncio

async def fetch(session,url):
    async with session.get(url) as response:
        return await response.text(), response.status

async def main():
    connector = aiohttp.TCPConnector(ssl=False)
    async with aiohttp.ClientSession(connector=connector, trust_env=False) as session:
        html,status = await fetch(session,'https://cuiqingcai.com')
        print(f'html:{html[:100]}...')
        print(f'status:{status}')

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

这样修改后,代码将禁用SSL验证,从而忽略证书错误。请注意,这样做可能会降低安全性,并且不建议在生产环境中使用。仅在特定的开发或测试场景下使用此功能。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 09:07:13 | 显示全部楼层
您好!根据报错信息,您遇到了证书验证错误。要忽略证书验证错误,可以通过设置ssl参数为False来实现。修改代码如下:
import aiohttp
import asyncio

async def fetch(session,url):
    async with session.get(url, ssl=False) as response:
        return await response.text(), response.status

async def main():
    async with aiohttp.ClientSession() as session:
        html,status = await fetch(session,'https://cuiqingcai.com')
        print(f'html:{html[:100]}...')
        print(f'status:{status}')

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
在fetch()函数中,我们在使用session.get()方法时,将ssl参数设置为False,以忽略证书验证错误。

请注意,忽略证书验证错误可能会带来一定的安全风险,请确保您知悉相关风险,并仅在您明确信任请求的目标网站时才进行此操作。

希望这能帮助到您!如果您有任何进一步的问题,请随时向我提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 09:07:49 | 显示全部楼层
求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-1 09:14:06 | 显示全部楼层

抱歉  你慢了一步
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 09:16:27 | 显示全部楼层

好吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 21:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表