在Apigee政策中进行Base64编码的最简单方法是什么?我需要编码要以编程方式发送的SMS文本。
我知道我可以明确地包含代码,但我更倾向于使用内置的功能(如果可用)。
答案 0 :(得分:3)
实现此目标的最有效方法是创建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。
答案 1 :(得分:1)
目前还没有内置的简单注入HTTP Basic Auth标头或生成字符串的base64编码的功能。
您可以使用Javascript标注执行此操作。
政策XML:
<Javascript name='JavaScript-SetAuthz'>
<ResourceURL>jsc://nameOfTheJavaScriptFileHere.js</ResourceURL>
</Javascript>
答案 2 :(得分:1)
我们还添加了一个示例,演示如何在JavaScript中执行此操作:
https://github.com/apigee/api-platform-samples/tree/master/sample-proxies/base64encoder
答案 3 :(得分:0)
- 缺乏评论的声誉(这样的耻辱)所以添加答案 -
由于您专门询问了编码文本而不是二进制内容,因此您可以使用b64encode而不是编码字符串对Cheeso的答案进行微小改进:
base64string = base64.b64encode('%s:%s' % (username, password))
在我的测试中,这也快一点。