Elasticsearch 查询在 Python 中使用 httplib 给出 "No handler for uri"

Elasticsearch query gives "No handler for uri" using httplib in Python

我正在使用官方 elasticsearch-py 库连接到 Elasticsearch 的本地实例(localhost,端口 9200,ES 版本 1.6.0)。这在独立的 Python 脚本中运行良好,但我无法让它与 Google App Engine 一起工作,我收到以下错误:

No handler found for uri [http://localhost:9200/transaction/websession/_search] and method [GET]

经过一些调试后,我将问题缩小到 App Engine 使用 httplib 作为 urlfetch RPC 代理。

基本上,我可以这样做:

r = urllib2.urlopen('http://localhost:9200/transaction/websession/_search')
r.read()

但不是这个:

c = httplib.HTTPConnection('localhost:9200')
c.request('GET', 'http://localhost:9200/transaction/websession/_search', None, {})
c.getresponse().read()

这是 Python 中的错误吗?或者在 Elasticsearch 中?我在这里错过了什么?

我找到了答案。问题是当前的 App Engine SDK。请求是这样创建的:

c.request('GET', 'http://localhost:9200/transaction/websession/_search', None, {})

什么时候应该是:

c.request('GET', '_search', None, {})

奇怪的是 latest source code version of the urlfetch stub seems to be very different from the shipped SDK.