Python-запросы: PUT-запрос к Azure завершается с ошибкой 415
Поэтому я пытаюсь использовать запросы Python для отправки PUT-запроса в Azure (для создания / обновления узла уведомлений - https://docs.microsoft.com/en-us/rest/api/notificationhubs/notificationhubs/createorupdate.
Мой код:
url = "https://management.azure.com/subscriptions/mysub/resourceGroups/Default-NotificationHubs-WestEurope/providers/Microsoft.NotificationHubs/namespaces/myNamespace/notificationHubs/notificationHubName?api-version=2016-03-01"
bearer_token = "my very long token"
headers = {
"dataType": "json",
"accept":"application/json",
"contentType":"application/json",
"Authorization": "Bearer " + bearer_token }
filepath = "/Users/..../pathTo.p12"
with open(filepath) as fh:
byte_array_p12 = fh.read()
data = {
'location': "West Europe",
'properties.apnsCredential': {
'properties.apnsCertificate': byte_array_p12,
'properties.certificateKey': "some nice pass"
}
}
r = requests.put(url, data, headers = headers)
Но выполнение r дает мне ошибку 415.
r.text
u'{"error":{"code":"UnsupportedMediaType","message":"The content media type \'application/x-www-form-urlencoded\' is not supported. Only \'application/json\' is supported."}}'
Где это сделал \'application/x-www-form-urlencoded\'
родом из?
Я явно устанавливаю заголовки для этого запроса, и он не включается... Я ничего не понимаю.
Я попробовал функциональность "Попробовать" на предоставленной странице Azure, где вы можете попробовать создать тело самостоятельно, но оно глючит...
Спасибо за любую помощь!
1 ответ
Решение
Заголовок HTTP должен Content-Type
и не contentType
,
headers = {
"dataType": "json",
"accept":"application/json",
"Content-Type":"application/json",
"Authorization": "Bearer " + bearer_token }
Также параметр data
должен быть в кодировке JSON.
r = requests.put(url, json=data, headers=headers)