Python-запросы: PUT-запрос к Azure завершается с ошибкой 415 - PullRequest
0 голосов
/ 17 января 2019

Поэтому я пытаюсь использовать запросы Python для отправки PUT-запроса в Azure (для создания / обновления концентратора уведомлений - https://docs.microsoft.com/en-us/rest/api/notificationhubs/notificationhubs/createorupdate#mpnscredential.

Мой код:

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\' взято?
Я явно устанавливаю заголовки для этого запроса, а тот не включается ... IЯ не в курсе.

Я попробовал функциональность "Попробуйте" на предоставленной странице Azure, где вы можете попробовать создать тело самостоятельно, но оно глючит ...

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 17 января 2019

Заголовок 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)
...