Как исправить ошибку «Неподдерживаемый тип носителя» на POST-запросе Python к Twilio - PullRequest
0 голосов
/ 08 октября 2019

Я следил за страницей быстрого запуска Twilio для их API функций .

Я застрял в той части, где я должен вручную загрузить файл JS-функции.

В их примерах POST используются cURL и node.js, но я использую Python 3.6:

# Manually upload the subscription function file
upload_url = f'https://serverless-upload.twilio.com/v1/Services/{sub_service_sid}/Functions/{sub_function_sid}/Versions'
function_request = requests.post(
                                upload_url,
                                files    = {'subscription_function_file': open('subscriptionFunction.js', 'rb')},
                                auth     = (account_sid, auth_token),
                                headers  = {
                                    'content-type': 'application/javascript',
                                    'path': '/subscription-function',
                                    'visibility': 'public'
                                }
                            )

В обоих примерах они объявляют тип содержимого как application/javascript. Однако, я получаю эту ошибку, когда делаю то же самое:

{"status":415,"message":"Unsupported media type","detail":"The server does not support the media type transmitted in the request.","code":20415,"moreInfo":"https://www/twilio.com/docs/errors/20415"}

Этот URL-адрес выбрасывает 404, поэтому я начал копаться в Словаре ошибок Twilio , но этот код не указан в списке. Кроме того, application/javascript отсутствует на их поддерживаемых типах носителей страница.

Я загружаю файл неправильно? Или их учебник неправильный?

1 Ответ

1 голос
/ 08 октября 2019

Twanio developer evangelist здесь.

Я думаю, что вы, возможно, перевели часть запроса curl на неправильные части запроса, сделанного с помощью requests, и я думаю, что это вызывает проблему. Вы не хотите устанавливать тип запроса равным application/javascript, который хочет быть типом файла, который вы загружаете. Вы можете установить это как часть files кортежа.

Вы не хотите отправлять другие биты данных, Path и Visibility как заголовки, они должны быть частью data, поэтому они становятся частью тела запроса.

Вместо этого попробуйте что-то вроде этого:

upload_url = f'https://serverless-upload.twilio.com/v1/Services/{sub_service_sid}/Functions/{sub_function_sid}/Versions'

files = { 'Content': ('subscriptionFunction.js', open('subscriptionFunction.js', 'rb'), 'application/javascript') }

function_request = requests.post(
                                upload_url,
                                files    = files,
                                auth     = (account_sid, auth_token),
                                data     = {
                                    'Path': '/subscription-function',
                                    'Visibility': 'public'
                                }
                            )

Дайте мне знать, если это поможет.

...