Python 3モジュールurllibを使用して、localhost:9200
のElasticsearchデータベースにアクセスします。私のスクリプトは、JSON形式でSTDINにパイプされた有効なリクエスト(Kibanaによって生成)を取得します。ここでPython 3でのElasticsearchへのアクセス
は私がやったことです:
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()
(。私は私のrepsonse.read()
自体があまり意味がありませんが、私はちょうどそれをシンプルに保つために望んでいたことを理解し)
私は、スクリプトを実行すると、私はそれが印刷され、弾にcurl
を経由して、それを与えていたので、私はスクリプトに配管よJSONデータは、正しいことを非常に確信して
HTTP Error 400: Bad request
を取得しますicsearch、そして戻ってくると期待していた書類を手に入れました。
私が間違っていたアイデアはありますか? urllib
を正しく使用していますか? urlencode
行のJSONデータを混乱させるのですか?私はElasticsearchに正しく照会していますか?
ありがとうございました。あなたは二つのこと
1のいずれかを実行することができます要求に
おそらくコンテンツタイプを指定する必要があります。こちらをご覧ください:https://docs.python.org/3/library/urllib.request.html#urllib.request.Request ..指定しない場合content-typeの場合、デフォルトでapplication/x-www-form-urlencodedになります。これは送信したものではありません。外部ライブラリを使用しても構わない場合は、リクエスト(http://docs.python-requests.org/ja/master/)を参照してください。 –
データオブジェクトの例を教えてください。 ElasticSearchに渡しますか? Btw私はESへのクエリのためのリクエストライブラリを使用します。それは非常に簡単です。ちょうど好奇心 - なぜペイロード(データ)を作成するために木場を使用し、あなたが一度400を渡すと応答で何をするつもりですか? – jlaur
@CorleyBrigman:リクエストライブラリを使用したいと思います。残念ながら、私は高度なセキュリティ環境で作業しており、厳密に必要なものを何かインストールすることは非常に嫌です。 – eins6180