Python JSON GET Запрос Like cURL - PullRequest
0 голосов
/ 10 января 2019

У меня есть команда cURL, которую я хотел бы перенести на Python.

curl -XGET "http://localhost:9200/nuix-7674bc4a60b74ea7bac8996a98b0cb94;item;schema-version=1/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "regexp": {
      "content": "(p)hotos"
    }
  }
}'

Он успешно возвращает ответ без ошибок.

Вот что я попробовал в Python 3.6, используя пакет requests.

import requests
import json

# api-endpoint
url = "http://localhost:9200/nuix-7674bc4a60b74ea7bac8996a98b0cb94;item;schema-version=1/_search"

# headers
headers = {'Content-type': 'application/json'}

# Define JSON String
params = """
{
    "query": {
        "regexp":{
            "content": "(p)hotos"
        }
    }
}
"""

params = json.loads(params)
print(params)

# sending get request and saving the response as response object
response = requests.get(url=url, params=params, headers=headers)

# extracting data in json format
data = response.json()
print(data['hits']['total'])
print('DONE')

Ответ response._content утверждает эту ошибку:

b'{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"request [/nuix-7674bc4a60b74ea7bac8996a98b0cb94;item;schema-version=1/_search] contains unrecognized parameter: [query]"}],"type":"illegal_argument_exception","reason":"request [/nuix-7674bc4a60b74ea7bac8996a98b0cb94;item;schema-version=1/_search] contains unrecognized parameter: [query]"},"status":400}'

Как правильно установить params?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Решение заключается в использовании параметра json вместо params.

response = requests.get(url=url, json=params, headers=headers)

Возможно, я мог бы переписать строку JSON в словарь, но я использую инструмент - Kibana, который автоматически генерирует полезную нагрузку cURL. Это решение позволяет мне копировать и вставлять полезную нагрузку JSON в мой скрипт Python.

0 голосов
/ 10 января 2019

requests ожидает dict, поскольку params не строка. Я не уверен, что это ваша проблема, но вы можете попробовать переписать как:

params = {
    "query": {
        "regexp":{
            "content": "(p)hotos"
        }
    }
}

Изучите этот раздел из документации для пошагового руководства: http://docs.python -requests.org / ru / master / user / quickstart / # pass-parameters-in-urls

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...