Ошибка HTTP 400 при использовании Python запрашивает POST и Intercom API

#python #python-requests #http-post #intercom

#python #python-запросы #http-post #внутренняя связь

Вопрос:

Я пытаюсь получить список разговоров из Intercom, используя их API, ограниченный в зависимости от даты их обновления.

Их сайт (https://developers.intercom.com/intercom-api-reference/reference#search-for-conversations ) говорит

Для поиска разговоров вам необходимо отправить запрос POST на https://api.intercom.io/conversations/search . Это примет объект запроса в теле, который определит ваши фильтры для поиска разговоров.

Итак, я попытался:

 import requests    
url = 'https://api.intercom.io/conversations/search'
data_params = {
 "query":  {
    "field": "updated_at",
    "operator": ">",
    "value": 1560436784
  }
}
headers = {'Authorization' : 'Bearer ******************', 'Accept':'application/json', 'Content-Type':'application/json'}
r = requests.post(url, headers = headers, data = data_params)

r.status_code
 

Это постоянно приводит к 'Bad Request' ошибке 400, но я изо всех сил пытаюсь понять, почему. Я также пробовал json = data_params в вызове post, но результат тот же. Я понимаю, что код может быть не полностью воспроизводимым, поскольку для него требуется аутентифицированное соединение с API, но если что-то явно не так, было бы полезно знать!

Ответ №1:

Очевидно, что здесь, похоже, нет obviously error .

для 400 Bad Request . Я думаю, вам следует проверить вас data_params , если чего-то не хватает или в плохом формате. также headers

Ответ №2:

Вам следует попробовать преобразовать словарь data_params в json.

Я тестировал с помощью json.dumps, и, похоже, это сработало:

 import json

url = 'https://api.intercom.io/conversations/search'
data_params = {
 "query":  {
    "field": "updated_at",
    "operator": ">",
    "value": 1560436784
  }
}
headers = {'Authorization' : 'Bearer ******************', 'Accept':'application/json', 'Content-Type':'application/json'}

r = requests.post(url, headers = headers, data = json.dumps(data_params))

print(r.status_code)