• python requests_html库从接口get数据报错Max retries exceeded with url解决方式记录


    问题:

    session = HTMLSession()
    
    r: requests_html.HTMLResponse
    r = session.get(url=req["url"], params=req["params"], cookies=req["cookies"]
    

    在跑的过程偶然出现一次Max retries exceeded with url报错,虽然只有一次,为了稳妥起见,我还是去查了一下可能的原因和解决办法
    报错信息为

    requests.exceptions.ConnectionError: HTTPConnectionPool(host='..com', port=80): Max retries exceeded with url: /diagno/version/data?=23&=23&=10&=10&=111&=273 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x09C44280>: Failed to establish a new connection: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。'))

    解决方案:
    经查找,可能的原因有2个

    1. http保持长连接导致短时间内大量连接存在,最终服务器拒绝访问;
    2. 访问次数频繁,被禁止访问
      原因2需要加代理,我就先不加,接下来只对原因1处理
    from requests_html import HTMLSession
    def api_get_html(self, req: dict):
        session = HTMLSession()
        for i in range(3):
            try:
                r: requests_html.HTMLResponse
                r = session.get(url=req["url"], params=req["params"], cookies=req["cookies"],headers={'Connection': 'close',})
                break
            except ConnectionError as e:
                logging.warning(f"{e}==>req:{str(req)}")
                time.sleep(2)
        else:
            raise e
    

    总的来说,就是访问时关闭TCP长连接"headers={'Connection': 'close',}",再用try……excep捕捉错误,捕捉到之后就等待2s后重连,总共尝试重连3次,最终如果还是不行就把错误报出来跳出程序

    ----更新------
    最近同事反馈又报了这个错误,查了一下不是这个方法报的错,是别的访问接口的方法。目前来说这种解决方式应该还是可行的。
    写了个装饰器,把所有访问接口方法的封装起来。后续再看看会不会报错。

  • 相关阅读:
    敏捷开发中的sprint是什么意思_百度知道
    桐君堂_百度百科
    HSTS Preloading
    做CloudXNS产品运营的这半年 – CHINA Testers
    java~spring-ioc的使用
    java~api返回值的标准化
    java8的函数式接口
    redis使用场景和java测试案例
    springboot~注册bean的方法
    学生信息管理系统问题集锦
  • 原文地址:https://www.cnblogs.com/congyinew/p/16327065.html
Copyright © 2020-2023  润新知