python elasticsearch 8.x通过代理发起请求方法

ops/2024/12/22 0:04:48/

由于python elasticsearch v8 engine的源码包中并未开放对于请求添加proxies的支持,导致在某些环境下无法连通外网的es服务。目前网上暂无相关的修改内容,我这边提供下自己修改的动态运行时替换elasticsearch包的源码方法demo

import gzip
import ssl
import time
import requests
from elastic_transport._node._http_requests import RequestsHttpNode
from typing import Any, Optional, Union
from elastic_transport._compat import warn_stacklevel
from elastic_transport._exceptions import ConnectionError, ConnectionTimeout, SecurityWarning, TlsError
from elastic_transport._models import ApiResponseMeta, HttpHeaders, NodeConfig
from elastic_transport.client_utils import DEFAULT, DefaultType, client_meta_version
from elastic_transport._node._base import (BUILTIN_EXCEPTIONS,RERAISE_EXCEPTIONS,BaseNode,NodeApiResponse,ssl_context_from_node_config,
)def custom_perform_request(self,method: str,target: str,body: Optional[bytes] = None,headers: Optional[HttpHeaders] = None,request_timeout: Union[DefaultType, Optional[float]] = DEFAULT,) -> NodeApiResponse:url = self.base_url + targetheaders = HttpHeaders(headers or ())request_headers = self._headers.copy()if headers:request_headers.update(headers)body_to_send: Optional[bytes]if body:if self._http_compress:body_to_send = gzip.compress(body)request_headers["content-encoding"] = "gzip"else:body_to_send = bodyelse:body_to_send = Nonestart = time.time()proxies_dict = {"http": "http://xx.xx.xx.xx:xx","http": "http://xx.xx.xx.xx:xx",}request = requests.Request(method=method, headers=request_headers, url=url, data=body_to_send)prepared_request = self.session.prepare_request(request)send_kwargs = {"timeout": (request_timeoutif request_timeout is not DEFAULTelse self.config.request_timeout)}send_kwargs.update(self.session.merge_environment_settings(  # type: ignore[arg-type]prepared_request.url, {}, None, None, None))send_kwargs.pop('proxies')try:response = self.session.send(prepared_request, proxies=proxies_dict,  **send_kwargs)  # type: ignore[arg-type]data = response.contentduration = time.time() - startresponse_headers = HttpHeaders(response.headers)except RERAISE_EXCEPTIONS:raiseexcept Exception as e:err: Exceptionif isinstance(e, requests.Timeout):err = ConnectionTimeout("Connection timed out during request", errors=(e,))elif isinstance(e, (ssl.SSLError, requests.exceptions.SSLError)):err = TlsError(str(e), errors=(e,))elif isinstance(e, BUILTIN_EXCEPTIONS):raiseelse:err = ConnectionError(str(e), errors=(e,))self._log_request(method=method,target=target,headers=request_headers,body=body,exception=err,)raise err from Nonemeta = ApiResponseMeta(node=self.config,duration=duration,http_version="1.1",status=response.status_code,headers=response_headers,)self._log_request(method=method,target=target,headers=request_headers,body=body,meta=meta,response=data,)return NodeApiResponse(meta,data,)RequestsHttpNode.perform_request = custom_perform_requestfrom elasticsearch import Elasticsearches = Elasticsearch(hosts=["http://xx.xx.xxx.xxx:9200"], basic_auth=("elastic", "xxxxxxxxxxxx"), node_class=RequestsHttpNode)
query = {"query": {"match_all": {}}}
response = es.search(index="xxxxxx_prod", body= query)
print(response)

http://www.ppmy.cn/ops/143885.html

相关文章

点击数字层级从 admin.vue 跳转到 inviter-list.vue 组件

文章目录 1、admin.vue2、inviter-list.vue 1、admin.vue 好的&#xff0c;我们来分析一下代码中“层级”这一列的逻辑&#xff0c;并探讨它与后端的关联。 “层级” 列的逻辑 在您的代码中&#xff0c;“层级”列的渲染逻辑如下&#xff1a; <el-table-columnalign&quo…

Immer编写更简单的逻辑

Immer 当我们在更新一个复杂的嵌套对象时&#xff1a; const [person, setPerson] useState({name: Niki de Saint Phalle,artwork: {title: Blue Nana,city: Hamburg, image: https://i.imgur.com/Sd1AgUOm.jpg,} });如果想要更新person.artwork.city的值&#xff0c;可…

Kaggler日志--Day7

进度24/12/17 昨日复盘&#xff1a; 尝试自己爬取了两个学校的就业信息数据&#xff0c;比较简单但是顺通了爬虫流程 看别人的代码&#xff1a;AQX的。 今日进度&#xff1a; 分析理解昨天代码的过程&#xff0c;统计问题 过程理解 EDA部分 对于不同变量类型判别的举例说明…

【GO环境安装】mac系统+GoLand使用

文章目录 下载安装包环境配置GoLandGo Modules 下载安装包 地址&#xff1a;GO下载地址 下载好后直接进行安装&#xff1a; 进入terminal&#xff0c;查看是否安装成功&#xff1a; 环境配置 在文稿下面创建工作目录&#xff1a; 在文稿下新建Go_Works文件夹&#xff0c;在…

游戏开发技能系统常用概念

一个角色同一时间可能存在多个Skill&#xff0c;一个当前播放的主动技能&#xff0c;还有好几个不在播放中&#xff0c;但是也没有结束的。 技能事件&#xff1a; 实现具体的技能功能&#xff0c;技能动作的执行都是通过触发事件来触发的&#xff0c;比如&#xff08;时间帧&am…

Hive是什么,Hive介绍

官方网站&#xff1a;Apache Hive Hive是一个基于Hadoop的数据仓库工具&#xff0c;主要用于处理和查询存储在HDSF上的大规模数据‌。Hive通过将结构化的数据文件映射为数据库表&#xff0c;并提供类SQL的查询功能&#xff0c;使得用户可以使用SQL语句来执行复杂的​MapReduce任…

vertx idea快速使用

目录 1.官网下载项目 2.修改代码 2.1拷贝代码方式 为了能够快速使用&#xff0c;我另外创建一个新的maven项目&#xff0c;将下载项目的src文件和pom文件拷贝到新建的maven项目。 2.2删除.mvn方式 3.更新配置 4.配置application 5.idea启动项目 1.官网下载项目 从vert…

依托 SSM 与 Vue 的电脑测评系统:展现电脑真实实力

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…