美文网首页
Influxdb-Python 使用代理访问数据库

Influxdb-Python 使用代理访问数据库

作者: cunfate | 来源:发表于2017-12-11 21:09 被阅读431次

背景

最近在用 influxdb 存一些设备信息,留作实时监控之用,然后想自己写一个类似grafana的东西玩。于是选择了 python 的 flask 做后端框架,与 influx 的接口就选择了官方推荐的 influxDB-Python

问题

公司使用的代理访问外网,平时就都用内网地址上网,也给 ubuntu 设置了内网地址作为全局的 proxy 。于是在调用

influx = InfluxDBClient(host='www.example.com', port=8086, username='root',
            database='mydb')
influx.write_points(something)

时遇到了问题,抛出异常提示 403 forbidden。

甩锅

日常被代理坑的我就立刻想到是代理的问题,然后觉得肯定有代理设置的 api ,然后查了一下文档,果然发现了InfluxDBClient的api里

class influxdb.InfluxDBClient(host=u'localhost', port=8086, username=u'root', password=u'root', database=None, ssl=False, verify_ssl=False, timeout=None, retries=3, use_udp=False, udp_port=4444, proxies=None)

是有proxies的选项的,然而却不知道应该用怎样的形式去给它赋值。于是查看了一下源代码,发现它所有的网络请求都是通过self.request()方法来完成的,而这个方法的关键操作就是

while retry:
            try:
                response = self._session.request(
                    method=method,
                    url=url,
                    auth=(self._username, self._password),
                    params=params,
                    data=data,
                    headers=headers,
                    proxies=self._proxies,
                    verify=self._verify_ssl,
                    timeout=self._timeout
                )
                break
            except (requests.exceptions.ConnectionError,
                    requests.exceptions.HTTPError,
                    requests.exceptions.Timeout):
                _try += 1
                if self._retries != 0:
                    retry = _try < self._retries
                if method == "POST":
                    time.sleep((2 ** _try) * random.random() / 100.0)
                if not retry:
                    raise
        # if there's not an error, there must have been a successful response
        if 500 <= response.status_code < 600:
            raise InfluxDBServerError(response.content)
        elif response.status_code == expected_response_code:
            return response
        else:
            raise InfluxDBClientError(response.content, response.status_code)

都是通过self._session这个私有对象来做的,然后发现self._session其实就是一个requests.Session对象,所以proxies参数用requests的形式传入就行了。

结论

查手册,传入格式如下:
proxies={'http_proxy': 'username:pwd@host:port'}

相关文章

  • Influxdb-Python 使用代理访问数据库

    背景 最近在用 influxdb 存一些设备信息,留作实时监控之用,然后想自己写一个类似grafana的东西玩。于...

  • 爬虫代理小记与aiohttp代理尝试

    总结了一些爬虫代理的资料和知识,并尝试使用asyncio和aiohttp使用代理ip访问目标网站,按代理IP的访问...

  • 1.nginx 入门

    nginx 基本用法 使用场景: 反向代理和负载均衡静态资源配置利用强大的并发功能,直接访问数据库--api服务 ...

  • 详解python插入influxdb数据的时间戳问题

    焦点:InfluxDB-Python 前段时间,需要往influxdb插入数据,就使用了InfluxDB-Pyth...

  • 数据库代理访问

    我们常常在开发中,需要连接数据库,然而数据库的安全组,一般都是受限制的(为了做网络隔离,只有特定的网段能够访问),...

  • 代理模式

    代理模式定义 为其它对象提供一种代理以控制对这个对象的访问。 代理模式使用场景 当无法或不想直接访问某个对象或访问...

  • 例解代理模式

    代理模式提供了对对象的另外一种访问方式,即通过代理对象访问目标对象。当不能或不想直接访问目标对象时,就可以使用代理...

  • 懒加载

    1、什么是懒加载? 懒加载也被称为延迟加载,它在查询的时候不会立刻访问数据库,而是返回代理对象,当真正去使用对象的...

  • DBLink

    DBLink作用:跨库访问。在当前数据库访问别的数据库,使用DBLink可以在当前数据库编写sql来查询别的数据库...

  • 当前微服务之间的三种通讯方式

    当前我们微服务架构中,微服务之间使用的三种通讯方式:代理访问,feign请求,消息队列 其中代理访问我们使用的是n...

网友评论

      本文标题:Influxdb-Python 使用代理访问数据库

      本文链接:https://www.haomeiwen.com/subject/kxrjixtx.html