Python Requests работает в консоли, но не в приложении

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

Скрипт очень длинный, но метод, который ломает, ниже:

def post_user(self, input_user, session=None):
    """
    :param user: a JSON object with all the user pieces needed to be posted to the endpoint
    :param session: a Requests session to be used. If None we'll create one
    """
    if not session:
        session = self.create_requests_session()
    else:
        session = session

    # JSON encode the user
    payload = json.dumps(input_user, sort_keys=True, indent=2, separators=(',', ': '))

    print(payload)  # DEBUG CODE

    # Post the data to endpoint
    response = session.post(self.endpoint, data=payload)

    # This will raise a status code on a bad status code
    response.raise_for_status()

Ниже также метод для create_requests_session():

def create_requests_session(self):
    """
    Start a requests session. Set Auth & Headers so we don't have to send it with each request
    :return: A new requests.Session object with auth & header values prepopulated.
    """

    session = requests.Session()
    session.auth = (self.app_id, self.api_key)
    session.headers = {'Content-Type': 'application/json', 'accept': 'application/json'}

    return session

Когда я запускаю весь скрипт и прохожу первый input_user это выглядит как диктат, похожий на. (Примечание: данные анонимны, но структура остается неизменной):

 {'user_id': '123456', 
  'email': 'foo@bar.com', 
  'custom_attributes': {
      'test_cell' : 'Variation'}
 }

Тем не менее, после доставки пользователю json.dumps(user) и затем отправив его через запрос POST, я получил ошибку 404.

Вот странная часть. Я послал этого точно такого же пользователя с точно таким же JSON, за исключением того, что я создал все части с помощью консоли Python (обратите внимание, некоторые строки скрыты для сохранения анонимности пользовательских данных):

In[82]: sesh = requests.session()
In[86]: header
Out[86]: {'Content-Type': 'application/json', 'accept': 'application/json'}
In[87]: sesh.headers = header
In[89]: payload = json.dumps(update_user)
In[91]: response = sesh.post(endpoint, data=payload)
In[92]: response
Out[92]: <Response [200]>

На данный момент я полностью потерян. Я попытался настроить прокси, чтобы попытаться сравнить запросы побайтно, но мне не повезло с этим. Любая помощь или понимание очень ценится.

1 ответ

Решение

Вы убедились, что ваша аутентификация действительна?

session.auth = (self.app_id, self.api_key)

В частности, для app_id должно быть установлено значение, соответствующее API-ключу (таким образом, app_id тестового приложения, если вы используете тестовое приложение).

Если Интерком получает идентификатор приложения, он не распознает его (в настоящее время) возвращает 404, что вы и видите. Это должно быть исправлено, чтобы вернуть 401.

Другие вопросы по тегам