Какой самый простой способ сделать кодировку Base64 в политике Apigee? Мне нужно закодировать текст SMS для отправки программно.
Я знаю, что мог бы включить код явно, но я бы предпочел использовать встроенную возможность, если она доступна.
Какой самый простой способ сделать кодировку Base64 в политике Apigee? Мне нужно закодировать текст SMS для отправки программно.
Я знаю, что мог бы включить код явно, но я бы предпочел использовать встроенную возможность, если она доступна.
Самый эффективный способ добиться этого — создать политику сценариев Python., затем используйте встроенный модуль base64 Python для создания простая функция, которая base64-кодирует или -декодирует аргумент.
Если вы возьмете примеры прокси отсюда: http://apigee.com/docs/api-services/content/api-proxy-samples вы найдете пример Python в /simpleProxy/apiproxy/resources/py
.
XML-код политики выглядит следующим образом:
<Script name="Script-GenerateAuthHeader">
<ResourceURL>py://Authheader.py</ResourceURL>
</Script>
Код Python будет выглядеть так:
import base64
username = flow.getVariable("request.formparam.client_id")
password = flow.getVariable("request.formparam.client_secret")
base64string = base64.encodestring('%s:%s' % (username, password))[:-1]
flow.setVariable("my.base64.blob", base64string)
В качестве альтернативы, если python не ваш стиль, вы можете сделать это в javascript, используя ресурс js или даже непосредственно в прокси Node.js.
Возможность просто внедрить заголовок HTTP Basic Auth или сгенерировать кодировку строки base64 в настоящее время не встроена.
Вы можете сделать это с помощью выноски Javascript, например.
XML политики:
<Javascript name='JavaScript-SetAuthz'>
<ResourceURL>jsc://nameOfTheJavaScriptFileHere.js</ResourceURL>
</Javascript>
Мы также добавили пример, который показывает, как это сделать в JavaScript:
https://github.com/apigee/api-platform-samples/tree/master/sample-proxy/base64encoder
enc-utf16-min.js, enc-base64-min.js, core-min.js
, прикрепив каждый из них к политике javascript, которую я позже удалил... но не раньше добавления тегов <IncludeURL>
в мою реальную политику javascript, которая должна была ссылайтесь на них следующим образом: >github.com/apigee/api-platform-samples/blob/master/
- person pulkitsinghal; 17.04.2014
-- Не хватает репутации, чтобы комментировать (такой позор), поэтому добавление ответа --
Поскольку вы спросили конкретно о кодировании текста, а не двоичного содержимого, вы можете внести небольшое улучшение в ответ Cheeso, используя b64encode вместо encodestring:
base64string = base64.b64encode('%s:%s' % (username, password))
Это также немного быстрее в моем тестировании.