Ошибки POST-запроса при работе CURL
Я пытаюсь использовать воркера Cloudflare (вставлено ниже) для отправки SMS-сообщения через Twilio API. Запрос CURL (также вставлен ниже) я основываю рабочего на работах.
Из-за ошибки 400 от рабочего тело сообщения передается неправильно{"code": 21602, "message": "Message body is required.", "more_info": "https://www.twilio.com/docs/errors/21602", "status": 400}
но код мне нравится. По крайней мере, мы можем подтвердить, что заголовок передан правильно, потому что внесение изменений в значение авторизации меняет ошибку.
Я также просмотрел пример запроса POST в галерее шаблонов и не нашел причины сбоя.
https://developers.cloudflare.com/workers/templates/pages/post_json/
Что мне нужно изменить в моем рабочем коде, чтобы запрос POST работал?
Примечание: я понимаю, что мне не следует класть токен Twilio Auth в тело, но я поверну ключ позже.
async function handleRequest(request) {
const init = {
body: JSON.stringify(body),
method: 'POST',
headers: {
'content-type': 'application/json',
'Authorization': "Basic " + btoa('[account id]:[Authtoken]'),
},
}
return await fetch(url, init)
}
addEventListener('fetch', event => {
return event.respondWith(handleRequest(event.request))
})
const url = 'https://api.twilio.com/2010-04-01/Accounts/[Account id]/Messages.json'
const body = {
Body:"Hello World",
From:"+[some number]",
To:"+[some number]]",
}
curl 'https://api.twilio.com/2010-04-01/Accounts/[Account id]/Messages.json' -X POST \
--data-urlencode 'To=+[some number]' \
--data-urlencode 'From=+[some number]' \
--data-urlencode 'Body=Hello World' \
-u [account id]:[auth token]
1 ответ
Потому что Twilio требует application/x-www-form-urlencoded
.
Создание или обновление ресурса включает выполнение HTTP PUT или HTTP POST для URI ресурса. В PUT или POST вы представляете свойства объекта, который хотите обновить, в виде пар ключ / значение, закодированных в URL. Не волнуйтесь, браузеры уже по умолчанию кодируют POST-запросы. Но не забудьте установить заголовок HTTP Content-Type на "application/x-www-form-urlencoded" для ваших запросов, если вы пишете свой собственный клиент.