用requests可以访问而aiohttp不可以的情况怎么解决

记录一下这次学习异步协程的一个经历吧
本身已经学会了用aiohttp和asyncio模块来实现异步协程爬取网站m3u8视频资源且已经在一个网站上成功实现快速爬m3u8和ts并合并了,但是当我尝试在另一个需要代理的网站爬取时却出现了问题


一会是
一会是

 

 

        然后我就在网上各种搜索,中间出现了iss错误,这让我很是难受,由于我爬取的这个网站它还有一个访问验证时效,m3u8下载地址还得一直改,不然失效了就会报错说又到处找说是浏览器设置还有网络设置啥的,我检查了都没有问题,后面又在ClientCession加入参数verity_ssl=False变成connector=aiohttp.TCPConnector(verify_ssl=False)后还是无果。

        后来我想会不会是我用aiohttp协程的问题,然后我就写了个requests单线程尝试一下,结果居然成功了,那时候已经晚上了,搞了一下午,终于有了方向,然后我就去找requests和aiohttp的不同,有说是aiohttp会把输入的网址编码改变的,然后就给网址套了个URL,有说可能是同时建立的连接数太多了导致的,所以我给ClientCession里面加了个参数limit来限制同时建立的连接数,不过情况也没有改善。
        直到最后到了晚上一点多实在要睡觉了,躺在床上用手机翻找解决方案时终于有结果了(很有意思,上次陷入困境也是这种情况下找到解决方法的),原来是aiohttp默认不使用全局代理,而requests是使用全局代理的,所以才出现requests可以下载但是aiohttp不可以下载的情况,解决方法如下:

        给session.get()里加参数proxy='http://proxy(自己的代理,设置里找或者用下面给的函数找)'aiohttp只能用http代理不能用https代理,或者在aiohttp.ClientSession()里加加参数trust_env=True变成这样:aiohttp.ClientSession(connector=aiohttp.TCPConnector(verify_ssl=False,limit=25),trust_env=True)(verify_ssl=False现在需要改成ssl=False了)


,然后第二天起床我就尝试了这个方法,确实有效,可以成功下载了,但是还是会报错,然后下载的结果总是会有几个ts文件是空的,也就是数据没有获取到,

 

 

然后剩下的就是解决这个问题了,还有我比较了一下,发现在session.get()里加proxy参数下载的效率比在aiohttp.ClientSession里加trust_env=True的效率高很多,所以还是建议用前者,当然也可以两个都用

解决方法:上方标红处

问题:Server disconnected的问题是什么原因导致的,已经尝试过了不是同时存在的连接数过多或连接超时,还有我搜到aiohttp是只能支持http代理,不能直接支持https代理的,但是我用http代理可以直接访问https的网站,让我挺疑惑也挺惊喜的,但我还是想知道原因以及怎么在aiohttp异步协程里使用https代理

上文提到的获取本地代理的函数

参考的文章 :

这个里面就有解决问题的办法了,不过刚开始没看到细节处,后来才反应过来[笑哭]:

 aiohttp使用代理ip访问https网站报错的问题_qq_43210211的博客-CSDN博客_aiohttp proxy

 那天晚上手机看到的启发文:

python 异步框架aiohttp无法使用本地代理的解决方法_FOAF-lambda的博客-CSDN博客

aiohttp知识:

Advanced Client Usage — aiohttp 3.8.1 documentation

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值