Экранирование urlencoded для Twilio API | Javascript

#javascript #twilio #urlencode #node-red #twilio-api

# #javascript #twilio #urlencode #узел -красный #twilio-api

Вопрос:

Я отправляю сообщения в Twilio API для Whatsapp, с ['Content-Type'] = 'application/x-www-form-urlencoded' которым все работает отлично, за исключением того факта, что я, похоже, не могу экранировать большинство специальных символов в теле сообщения.

 Cat amp; Dog: http://catdog.io
 

становится

 Cat amp;amp; Dog: http:amp;#x2F;amp;#x2F;catdog.io
 

Ни encodeURIComponent, ни encodeURI не справляются с задачей, и в доставленном сообщении отображается как

 Cat%20%26 Dog: http://catdog.io
 

и

 Cat%20amp;amp; Dog: http:amp;#x2F;amp;#x2F;catdog.io
 

соответственно.

Что-нибудь, чего мне не хватает / что здесь совершенно неправильно?

Спасибо!

Комментарии:

1. Как вы на самом деле делаете запрос здесь? Можете ли вы поделиться кодом или своим узловым узлом?

2. Конечно! Добавил их к вопросу.

3. Я вижу, что вы передаете JSON, но запрос API ожидает application/x-www-form-urlencoded (вы уже правильно настроили заголовок content-type для этого). Интересно, если из-за того, что вы передаете данные через JSON, они каким-то образом экранируются дважды. Для справки, ваши амперсанды должны быть закодированы как & , а ваши пробелы должны быть .

Ответ №1:

Если вы работаете с node.js , вы можете использовать npm querystring нажмите, чтобы увидеть

Комментарии:

1. Спасибо, Мариус, попробую это. В настоящее время я нахожусь на Node-Red, но попытаюсь установить там строку запроса с помощью npm. Чего я пока не понимаю, так это того, как, например, должен выглядеть экранированный amp; . Кстати, я передаю соответствующие строки внутри объекта JSON, но это также не вопрос экранирования JSON.

Ответ №2:

РЕШЕНО: в узле шаблона Node-Red необходимо поместить полезную нагрузку в тройные скобки, а не в двойные, как это:

 { "To": "whatsapp: 4567890123", "From": "whatsapp: 1234567890", "Body":"{{{payload}}}"}