我是新来的堆叠溢出,所以如果我犯了错误,我很抱歉。
我必须编写一个python脚本,它使用Elasticsearch收集一些数据,然后将数据写入数据库。我很难用elasticsearch收集数据,因为我工作的公司是一个代理。
脚本在没有代理的情况下工作但我不知道如何将代理设置传递给Elasticsearch。
以下代码在没有代理的情况下工作:
es = Elasticsearch(['https://user:password@logs.net/elasticsearch'])
res = es.search(index=index, body=request, search_type="count")
当我在代理后面时,我尝试了以下几点:
es = Elasticsearch(['https://user:password@logs.net/elasticsearch'], _proxy = 'http://proxy.org', _proxy_headers = {'basic_auth': 'user:pw'})
res = es.search(index=index, body=request, search_type="count")
return res
有人知道我必须传递的关键字吗,Elasticsearch,所以它使用代理?
任何帮助都会很好。
谢谢。
发布于 2018-05-18 18:28:22
通常,我们不需要为代理添加额外的代码,python低级模块应该能够直接使用系统代理(即http_proxy
)。
在以后的版本(至少6.x)中,我们可以使用requests
模块而不是urllib3
来很好地解决这个问题,参见https://elasticsearch-py.readthedocs.io/en/master/transports.html
# make sure the http_proxy is in system env
from elasticsearch import Elasticsearch, RequestsHttpConnection
es = Elasticsearch([es_url], connection_class=RequestsHttpConnection)
另一个可能的问题是search
使用GET
方法作为默认值,它被我的旧缓存服务器(squid/3.19)拒绝,将添加额外的参数send_get_body_as
,参见https://elasticsearch-py.readthedocs.io/en/master/#environment-considerations
from elasticsearch import Elasticsearch
es = Elasticsearch(send_get_body_as='POST')
https://stackoverflow.com/questions/32778235
复制相似问题