Ich möchte mit dem Python 3-Modul urllib auf eine Elasticsearch-Datenbank unter localhost:9200
zugreifen. Mein Skript erhält eine gültige Anfrage (generiert von Kibana) an STDIN im JSON-Format. HierZugreifen auf Elasticsearch mit Python 3
ist das, was ich getan habe:
import json
import sys
import urllib.parse
import urllib.request
er = json.load(sys.stdin)
data = urllib.parse.urlencode(er)
data = data.encode('ascii')
uri = urllib.request.Request('http://localhost:9200/_search', data)
with urllib.request.urlopen(uri) as repsonse:
response.read()
(Ich verstehe, dass meine repsonse.read()
nicht viel Sinn für sich allein nicht, aber ich wollte es nur einfach halten.)
Als ich das Skript ausführen , erhalte ich eine
HTTP Error 400: Bad request
ich bin sehr sicher, dass die JSON-Daten I Rohrleitung an das Skript bin richtig ist, da ich es gedruckt hatte, und fütterte es über curl
zu Elast ich habe die Dokumente, die ich erwartet hatte, zurückbekommen.
Irgendwelche Ideen, wo ich falsch gelaufen bin? Benutze ich urllib
richtig? Kann ich die JSON-Daten in der urlencode
Zeile durcheinander bringen? Fragesuche ich Elasticsearch korrekt?
Danke für Ihre Hilfe.
Sie müssen wahrscheinlich einen Inhaltstyp angeben ... siehe hier: https://docs.python.org/3/library/urllib.request.html#urllib.request.Request .. wenn Sie nicht angeben Bei einem Inhaltstyp wird standardmäßig "application/x-www-form-urlencoded" verwendet. Dies ist nicht das, was Sie gesendet haben. Wenn es Ihnen nichts ausmacht, eine externe Bibliothek zu verwenden, machen Anfragen (http://docs.python-requests.org/en/master/) dies ein wenig einfacher ... –
Können Sie ein Beispiel für das Datenobjekt angeben, dass Sie gehen zu ElasticSearch? Btw Ich benutze die Anfragen-Bibliothek für die Abfrage an ES. Es ist super einfach. Nur neugierig - warum Kibana verwenden, um die Nutzlast (Daten) zu erstellen und was gedenken Sie mit der Antwort zu tun, sobald Sie die 400 überschreiten? – jlaur
@CorleyBrigman: Ich wünschte, ich könnte die Anfrage-Bibliothek verwenden. Leider arbeite ich in einer Hochsicherheitsumgebung und sie sind sehr zurückhaltend, etwas mehr als das zu installieren, was unbedingt benötigt wird. – eins6180