Docs/ELK/命令行访问es(fail).md
2022-10-18 16:59:37 +08:00

1.8 KiB
Raw Blame History

## 第一个参数是访问方式get/put/delete/post等第二个参数是文件或者uri字符串如/item/es/_search
## 文件中第一行为uri字符串
## 其他行合并组成一个访问的data数据
## 测试失败不识别query暂时未找到解决方法


#!/usr/bin/env python
#_*_Coding:UTF-8_*_

import requests
import sys
import json
import os

class Esdata(object):
  def __init__(self, refers, header):
    self.refers = refers
    self.header = header

  ## 通过脚本参数传入,决定调用的函数
  def operator(self, func):
    return getattr(requests, func)

  ## 得到response
  def getdata(self, func, uri, data):
    url = self.refers + uri
    if self.operator(func) in ["put", "post"]:
      response = self.operator(func)(url, data=data, headers=header)
    else:
      response = self.operator(func)(url, params=data, headers=header)
    return response

if __name__ == '__main__':
  refers = 'http://127.0.0.1:9200'  
  header = {"content-Type": "application/json"}
  # 传递参数get/put/post/delete等
  methods = sys.argv[1]
  d = sys.argv[2]
  # 判断第二个参数是否文件
  if d and os.path.isfile(d):
    with open(d, 'rb') as f:
      # readline函数一次读取一行这是第一行uri
      uri = f.readline()
      data = ''
      # 其他行组成data用于传入访问链接
      for line in f.readlins()[0:]:
        data = data + line.strip()
  else:
    uri = d
    data = None

  # 读出的data中会把双引号转换成单引号但转换成json格式就会异常需要替换一下
  data = data.replace("\'","\"")

  es = Esdata(refers, header)
  res = es.getdata(methods, uri, json.loads(data))
  print(json.dumps(res.text, sort_keys=True, indent=4, separators=(', ', ': '), ensure_ascii=False))