Повторное редактирование с дополнительными обновлениями:
Попытка устранить неполадки в python-запросах, чтобы увидеть, если что-то не так с запросом PUT, но не уверен, как действовать.
Ниже приведен фрагмент моего кода:
def API_request(url=None, headers=None, payload=None, update=False):
r = None
if update and headers and payload:
print "put request to %s with %s of %s" % (url, headers, payload)
r = requests.put(url, headers=headers, data=payload)
if headers and payload and not update:
print "post request to %s with %s of %s" % (url, headers, payload)
r = requests.post(url, headers=headers, data=payload)
print r.status_code
print r.text
Когда вышеприведенный отправляет запрос POST для создания записи, он работает.Однако всякий раз, когда он отправляет запрос PUT, я получаю сообщение об ошибке 401: «Учетные данные аутентификации не были предоставлены».Это происходит в нескольких конечных точках.
401
{"detail":"Authentication credentials were not provided."}
Если я скопирую / вставлю соответствующий напечатанный вывод из вышеприведенной функции печати PUT в прямой запрос HTTPie, это сработает.Приведенный ниже запрос приводит к успешному ответу 200 и обновленной записи на сервере:
http --debug PUT [url] < [file containing payload] Authorization:'Token [token]'
Если я жестко закодирую простой скрипт, который не делает ничего, кроме импорта python и json и PUT точно таких же данных в те же данныеURL, использующий те же заголовки (напечатан из оригинального утверждения), работает.Приведенный ниже сценарий приводит к успешному ответу 200 и обновленной записи на сервере:
import requests, json
url = "[my url"
headers = {'Content-Type': 'application/json', 'Authorization': 'Token [my token]'}
data = {[my data]}
payload = json.dumps(data)
r = requests.put(url, headers=headers, data=payload)
print r.status_code
print r.text
Я отправил информацию из обоих сценариев на https://requestbin.fullcontact.com/, и они выглядят идентичными.
БОЛЬШАЯ ПРОБЛЕМА:
После целого дня отладки я выяснил, что даже запросы, которые генерировали ошибку 401, успешно попадали на сервер и обновляли соответствующие записи.Проще говоря, это было бы невозможно без правильной и функциональной аутентификации.Учитывая это, почему я получаю ошибку 401 из запроса PUT?
Рад ответить на любые вопросы в комментариях.