Аутентификация в Elasticsearch с использованием Python - PullRequest
0 голосов
/ 16 мая 2018

Я хочу использовать Python в Elasticsearch. Поэтому я написал код аутентификации на Python для Elasticsearch. Но я получаю сообщение об ошибке «TypeError: объект« Session »не вызывается». Вот код:

import requests
from requests import Session
from requests.auth import HTTPBasicAuth
uname = 'elastic'
pswd = 'elastic'
session = requests.Session()
session.auth = HTTPBasicAuth(uname, pswd)
res = requests.get('http://localhost:9200',auth=session)
print(res.content)

Куда я иду не так?

Ответы [ 7 ]

0 голосов
/ 06 сентября 2018

Вместо сеансов вы можете напрямую использовать следующий метод для подключения к серверу эластичного поиска:

import requests
from requests.auth import HTTPBasicAuth 
from pprint import pprint 

username = 'elastic'
password = 'elastic'

response = requests.get('http://localhost:9200', auth = HTTPBasicAuth(username, password))

pprint(response.content)
0 голосов
/ 14 декабря 2018

Я бы порекомендовал использовать библиотекуasticsearch для подключения.

Вот пример:

from elasticsearch import Elasticsearch
es = Elasticsearch(['hostname:port'],http_auth=('username','password'))
#check if it exists...
if es.exists(index="test",doc_type="test",id="1234"):
    es.update(index="test",doc_type="test",id="1234",body{"doc": {"hi":"data"}})
else:
    es.create(index="test",doc_type="test",id="1234",body={"hi":"data"})
0 голосов
/ 28 мая 2018

Есть ли причина, по которой вы бы не использовали клиентскую библиотеку pythonasticsearch.

from elasticsearch import Elasticsearch

# you can use RFC-1738 to specify the url
es = Elasticsearch(['https://user:secret@localhost:443'])

# ... or specify common parameters as kwargs

es = Elasticsearch(
    ['localhost', 'otherhost'],
    http_auth=('user', 'secret'),
    scheme="https",
    port=443,
)

# SSL client authentication using client_cert and client_key

from ssl import create_default_context

context = create_default_context(cafile="path/to/cert.pem")
es = Elasticsearch(
    ['localhost', 'otherhost'],
    http_auth=('user', 'secret'),
    scheme="https",
    port=443,
    ssl_context=context,
)

https://elasticsearch -py.readthedocs.io / en / master / index.html

Когда у вас есть объект эластичного поиска, вы легко можете запросить ваш индекс

res = es.get(index="test-index", doc_type='tweet')
print(res['_source'])
0 голосов
/ 28 мая 2018

Сначала создайте токен авторизации Basic header на основе вашего имени пользователя и передайте его с помощью модуля base64, если вы не знаете, как его использовать, просто создайте заголовок Basic Authentication Здесь :

После этогосоздать словарь, который будет передан в качестве заголовка аутентификации.Смотрите пример кода ниже:

  import requests

  #username = elastic password = elastic
  auth_token = 'ZWxhc3RpYzplbGFzdGlj'
  head = head = {
  'Content-Type' : 'application/json; charset=utf8',
  'Authorization' : 'Basic %s' % auth_token,
  'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 
   Firefox/24.0'
  }

  res = requests.get('http://localhost:9200', header=head)
  print(res.json())
0 голосов
/ 17 мая 2018

Попробуйте сделать это простым способом.

import requests
from requests.auth import HTTPBasicAuth
res = requests.get(url="url", auth=HTTPBasicAuth("username", "password"))
print(res.json())

Надеюсь, это поможет.

0 голосов
/ 16 мая 2018

Если вы хотите использовать Session объект, сначала давайте уточним , что это за :

Объект Session позволяет сохранять определенные параметры в запросах.

Вот как вы можете изменить свой код:

session = requests.Session()
session.auth = HTTPBasicAuth(uname, pswd)
res = session.get('http://localhost:9200')

И get будет использовать auth, определенный выше, неявно.

Проверьте страницу, указанную выше, есть множество примеров.

И если вы не собираетесь повторно использовать соединение, вы можете сбросить Session и пойти с auth в get, как предлагает Наренда в другом ответе .

0 голосов
/ 16 мая 2018

Согласно документации http://docs.python -requests.org / ru / master / пользователь / аутентификация /

удалите объект сеанса и попробуйте это

requests.get('url', auth=HTTPBasicAuth('user', 'pass'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...