弹性云:API 端点 - 404 未在搜索中找到?
Elastic Cloud: API endpoint - 404 Not Found on search?
描述
我想使用 REST API 通过 API 密钥授权查询我们的弹性云实例中的数据。
采取的步骤
我尝试使用 SQL API 以及搜索 API。注意,我更喜欢使用 SQL API.
基于文档中提供的以下 curl 命令:
curl -X POST "localhost:9200/_sql?format=txt&pretty" -H 'Content-Type: application/json' -d'
{
"query": "SELECT * FROM library WHERE release_date < \u00272000-01-01\u0027"
}
'
curl -u elastic:password https://CLUSTER_ID.REGION.PLATFORM.found.io:9243/my_index/my_type -XPOST -d '{
"title": "One", "tags": ["ruby"]
}'
{"_index":"my_index","_type":"my_type","_id":"AV3ZeXsOMOVbmlCACuwj","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"created":true}
和 documentation about the REST API,我尝试了以下操作:
import base64
import json
import requests
if __name__ == '__main__':
response1 = requests.post(
'https://{redacted-id}.northamerica-northeast1.gcp.elastic-cloud.com:9243/_sql?format=txt',
headers={
"Authorization": base64.standard_b64encode(bytes('{API_KEY_ID}:{API_KEY_KEY}', 'utf-8')),
"Content-Type": 'application/json'
},
data={
"query": """
...
"""
}
)
print('response1')
print(response1)
response2 = requests.get(
'https://{redacted-id}.northamerica-northeast1.gcp.elastic-cloud.com:9243/logs-pubsub/_search',
headers={
"Authorization": base64.standard_b64encode(bytes('{API_KEY_ID}:{API_KEY_KEY}', 'utf-8')),
"Content-Type": 'application/json'
},
data={
"query": {
# ...
}
}
)
print('response2')
print(response2)
但是两个查询的回答都是 404 - 未找到。
我错过了什么?我是否遗漏了路径的一部分,例如 /api/...
、/rest/...
?或者这是从 403 到 404 的误导,问题是 API 键?
谢谢!
ElasticStack 的好心人为我提供了以下答案。有两个问题:
上面的URL指向的是Kibana实例,而不是ElasticCloud实例
为了得到合适的URL:
- 导航到 https://cloud.elastic.co/deployments/
- 单击您的部署:
- 单击 Elasticsearch 端点的复制端点:
授权 header 格式不正确
ApiKey 支持的请求的授权 header 如下:
ApiKey {B64_ENCODE('API_KEY_ID:API_KEY_KEY')}
在python中可以写成:
"ApiKey " + str(base64.standard_b64encode(bytes('API_KEY_ID:API_KEY_KEY', 'utf-8')), 'utf-8')
最后,团队还强烈建议我看看他们的 Free on-demand Elasticsearch training。
希望对路过这里的人有所帮助!
描述
我想使用 REST API 通过 API 密钥授权查询我们的弹性云实例中的数据。
采取的步骤
我尝试使用 SQL API 以及搜索 API。注意,我更喜欢使用 SQL API.
基于文档中提供的以下 curl 命令:
curl -X POST "localhost:9200/_sql?format=txt&pretty" -H 'Content-Type: application/json' -d'
{
"query": "SELECT * FROM library WHERE release_date < \u00272000-01-01\u0027"
}
'
curl -u elastic:password https://CLUSTER_ID.REGION.PLATFORM.found.io:9243/my_index/my_type -XPOST -d '{
"title": "One", "tags": ["ruby"]
}'
{"_index":"my_index","_type":"my_type","_id":"AV3ZeXsOMOVbmlCACuwj","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"created":true}
和 documentation about the REST API,我尝试了以下操作:
import base64
import json
import requests
if __name__ == '__main__':
response1 = requests.post(
'https://{redacted-id}.northamerica-northeast1.gcp.elastic-cloud.com:9243/_sql?format=txt',
headers={
"Authorization": base64.standard_b64encode(bytes('{API_KEY_ID}:{API_KEY_KEY}', 'utf-8')),
"Content-Type": 'application/json'
},
data={
"query": """
...
"""
}
)
print('response1')
print(response1)
response2 = requests.get(
'https://{redacted-id}.northamerica-northeast1.gcp.elastic-cloud.com:9243/logs-pubsub/_search',
headers={
"Authorization": base64.standard_b64encode(bytes('{API_KEY_ID}:{API_KEY_KEY}', 'utf-8')),
"Content-Type": 'application/json'
},
data={
"query": {
# ...
}
}
)
print('response2')
print(response2)
但是两个查询的回答都是 404 - 未找到。
我错过了什么?我是否遗漏了路径的一部分,例如 /api/...
、/rest/...
?或者这是从 403 到 404 的误导,问题是 API 键?
谢谢!
ElasticStack 的好心人为我提供了以下答案。有两个问题:
上面的URL指向的是Kibana实例,而不是ElasticCloud实例
为了得到合适的URL:
- 导航到 https://cloud.elastic.co/deployments/
- 单击您的部署:
- 单击 Elasticsearch 端点的复制端点:
授权 header 格式不正确
ApiKey 支持的请求的授权 header 如下:
ApiKey {B64_ENCODE('API_KEY_ID:API_KEY_KEY')}
在python中可以写成:
"ApiKey " + str(base64.standard_b64encode(bytes('API_KEY_ID:API_KEY_KEY', 'utf-8')), 'utf-8')
最后,团队还强烈建议我看看他们的 Free on-demand Elasticsearch training。
希望对路过这里的人有所帮助!