【发布时间】:2014-01-30 03:56:09
【问题描述】:
在 Apigee 政策中进行 Base64 编码的最简单方法是什么?我需要对要以编程方式发送的 SMS 文本进行编码。
我知道我可以明确地包含代码,但我更喜欢使用内置的功能(如果可用)。
【问题讨论】:
标签: apigee
在 Apigee 政策中进行 Base64 编码的最简单方法是什么?我需要对要以编程方式发送的 SMS 文本进行编码。
我知道我可以明确地包含代码,但我更喜欢使用内置的功能(如果可用)。
【问题讨论】:
标签: apigee
最有效的方法是创建一个python script policy,然后使用python's built-in base64 模块构建一个简单的函数,对参数进行base64编码或解码。
如果您从此处获取示例代理:http://apigee.com/docs/api-services/content/api-proxy-samples,您将在 /simpleProxy/apiproxy/resources/py 中找到一个 python 示例。
策略 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 不是你的风格,you could do this in javascript 使用 js 资源,甚至直接在 Node.js proxy 中。
【讨论】:
目前没有内置简单地注入 HTTP Basic Auth 标头或生成字符串的 base64 编码的功能。
您可以使用 Javascript 标注来做到这一点,就像这样。
政策 XML:
<Javascript name='JavaScript-SetAuthz'>
<ResourceURL>jsc://nameOfTheJavaScriptFileHere.js</ResourceURL>
</Javascript>
【讨论】:
-- 缺乏评论的声誉(这样的耻辱)所以添加一个答案--
由于您专门询问了编码文本而不是二进制内容,因此您可以通过使用 b64encode 而不是 encodestring 对 Cheeso 的答案进行小幅改进:
base64string = base64.b64encode('%s:%s' % (username, password))
这在我的测试中也快了一点。
【讨论】:
我们还添加了一个示例来展示如何在 JavaScript 中执行此操作:
https://github.com/apigee/api-platform-samples/tree/master/sample-proxies/base64encoder
【讨论】:
enc-utf16-min.js, enc-base64-min.js, core-min.js,方法是将每个脚本附加到我后来删除的 javascript 策略中......但不是在我的实际 javascript 中添加 <IncludeURL> 标签之前需要像这样引用它们的策略:github.com/apigee/api-platform-samples/blob/master/…
现在 Apigee 中内置了更新的功能 - 消息模板中内置了 encodeBase64 和 decodeBase64。有关更多详细信息,请参阅: https://docs.apigee.com/api-platform/reference/message-template-intro#base64-encoding-functions
【讨论】: