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.