在Apigee策略中執行Base64編碼的最簡單方法是什麼?我需要編碼SMS的文本以編程方式發送。Apigee Edge策略中的Base64編碼
我知道我可以明確包含代碼,但我更喜歡使用內置的功能(如果可用)。
在Apigee策略中執行Base64編碼的最簡單方法是什麼?我需要編碼SMS的文本以編程方式發送。Apigee Edge策略中的Base64編碼
我知道我可以明確包含代碼,但我更喜歡使用內置的功能(如果可用)。
完成此操作的最有效方法是創建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)
另外,如果蟒蛇是不是你的風格,you could do this in javascript使用JS資源,或甚至直接在Node.js proxy。
當前沒有內置簡單注入HTTP基本身份驗證標頭或生成字符串的base64編碼的功能。
您可以使用Javascript標註來做到這一點,就像這樣。
政策XML:
<Javascript name='JavaScript-SetAuthz'>
<ResourceURL>jsc://nameOfTheJavaScriptFileHere.js</ResourceURL>
</Javascript>
- 缺乏信譽評論(這種恥辱),因此增加一個答案 -
既然你特別問有關編碼的文本而不是二進制內容,您可以使用b64encode而不是編碼字符串對Cheeso的答案做一個小改進:
base64string = base64.b64encode('%s:%s' % (username, password))
這在我的測試中也稍微快一點。
我們還添加了一個示例,演示如何在JavaScript中做到這一點:
https://github.com/apigee/api-platform-samples/tree/master/sample-proxies/base64encoder
這工作。在將其手動合併到現有的Api-Proxy時,我必須通過將腳本附加到JavaScript策略來上傳腳本'enc-utf16-min.js,enc-base64-min.js,core-min.js'我後來刪除了......但不是在我需要引用它們的實際javascript策略中添加'
https://gist.github.com/pulkitsinghal/10946736 – pulkitsinghal
當然最容易在Python。 – Cheeso
@Cheeso你也有這樣的例子嗎? :) – brandonscript
是的,我在這裏附加它。 – Cheeso