解决python异步框架aiohttp无法使用本地代理问题

 更新时间:2024年07月18日 09:06:54   作者:FOAF-lambda  
这篇文章主要介绍了解决python异步框架aiohttp无法使用本地代理问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题

  • aiohttp 在全局代理模式下无法访问墙外的网址,而requests可以
  • aiohttp不支持https代理,无论访问的网址是http还是https,使用代理是字符串proxy='http://127.0.0.1:10080'
import aiohttp
import asyncio
headers = {
        'User-Agent': "mozilla/5.0 (windows nt 6.1; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/69.0.3494.0 safari/537.36",
}
async def fetch(session,url):
    async with session.get(url=url,headers=headers,timeout=50,verify_ssl=False,proxy='http://127.0.0.1:10080') as resposne:
        print(resposne.status)
        return await resposne.text()
async def main():
    async with aiohttp.ClientSession() as session:
        url='https://www.google.com'
        html = await fetch(session,url)
        print(html)
loop = asyncio.get_event_loop()
loop.run_until_complete(main()) 
  • 当session.get里面不传入proxy时
  • 会根据ClientSession里面的一个参数叫trust_env是否为True来使用本地代理
  • 但源码中的使用条件是
elif self._trust_env:
    for scheme, proxy_info in proxies_from_env().items():
        if scheme == url.scheme:
            proxy = proxy_info.proxy
            proxy_auth = proxy_info.proxy_auth
            break
  • scheme == url.scheme 这个条件阻挡了请求https网址
  • aiohttp不支持https代理
  • 所以这是一个矛盾的地方

解决方式1

  • 修改源码
  • 对scheme == url.scheme这个条件进行修改
  • 并且在aiohttp.ClientSession(trust_env=True)传入trust_env=True
  • 这种方式不提倡

解决方式2

  • 获取本地代理
  • 然后在没有代理时在session.get使用本地代理
def get_local_proxy():
    
    from urllib.request import getproxies
    proxy = getproxies()['http']
    #proxies = {'http': 'http://127.0.0.1:10809', 'https': 'http://127.0.0.1:10809'}
    proxies = {'http': proxy , 'https': proxy}
    return proxies

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python使用jpype模块调用jar包过程解析

    Python使用jpype模块调用jar包过程解析

    这篇文章主要介绍了Python使用jpype模块调用jar包过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • python装饰器与递归算法详解

    python装饰器与递归算法详解

    本文给大家详细讲解了python中的装饰器与递归算法,有需要的小伙伴可以来参考下,希望对大家学习Python能够有所帮助
    2016-02-02
  • python文档字符串(函数使用说明)使用详解

    python文档字符串(函数使用说明)使用详解

    这篇文章主要介绍了python文档字符串(函数使用说明)使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python中tuple类型的使用

    Python中tuple类型的使用

    在Python中,元组(tuple)是一种不可变的序列类型,可以包含多个值,这些值可以是不同类型的,本文主要介绍了Python中tuple类型的使用,感兴趣的可以了解一下
    2023-12-12
  • Python Des加密解密如何实现软件注册码机器码

    Python Des加密解密如何实现软件注册码机器码

    这篇文章主要介绍了Python Des加密解密如何实现软件注册码机器码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Python实现12种降维算法的示例代码

    Python实现12种降维算法的示例代码

    数据降维算法是机器学习算法中的大家族,与分类、回归、聚类等算法不同,它的目标是将向量投影到低维空间,以达到某种目的如可视化,或是做分类。本文将利用Python实现12种降维算法,需要的可以参考一下
    2022-04-04
  • 如何利用饰器实现 Python 函数重载

    如何利用饰器实现 Python 函数重载

    这篇文章主要介绍了如何利用饰器实现 Python 函数重载,需要的朋友可以参考下面文章内容,希望能帮助到你
    2021-09-09
  • 在Python的Django框架中为代码添加注释的方法

    在Python的Django框架中为代码添加注释的方法

    这篇文章主要介绍了在Python的Django框架中为代码添加注释的方法,需要的朋友可以参考下
    2015-07-07
  • python中sort()函数用法详解

    python中sort()函数用法详解

    Python和Java等编程语言一样,提供了一种自动排序的方法,Java中是Arrays.sort()方法,而Python中是sort()方法,下面这篇文章主要给大家介绍了关于python中sort()函数用法的相关资料,需要的朋友可以参考下
    2022-08-08
  • 为什么python比较流行

    为什么python比较流行

    在本篇文章里小编给大家分析了关于python比较流行的原因以及优势等,需要的朋友们可以参考下。
    2020-06-06

最新评论