2014-01-11 61 views
4

在Apigee策略中執行Base64編碼的最簡單方法是什麼?我需要編碼SMS的文本以編程方式發送。Apigee Edge策略中的Base64編碼

我知道我可以明確包含代碼,但我更喜歡使用內置的功能(如果可用)。

回答

2

完成此操作的最有效方法是創建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

+0

當然最容易在Python。 – Cheeso

+0

@Cheeso你也有這樣的例子嗎? :) – brandonscript

+0

是的,我在這裏附加它。 – Cheeso

1

當前沒有內置簡單注入HTTP基本身份驗證標頭或生成字符串的base64編碼的功能。

您可以使用Javascript標註來做到這一點,就像這樣。

政策XML:

<Javascript name='JavaScript-SetAuthz'> 
    <ResourceURL>jsc://nameOfTheJavaScriptFileHere.js</ResourceURL> 
</Javascript> 

the JavaScript

0

- 缺乏信譽評論(這種恥辱),因此增加一個答案 -

既然你特別問有關編碼的文本而不是二進制內容,您可以使用b64encode而不是編碼字符串對Cheeso的答案做一個小改進:

base64string = base64.b64encode('%s:%s' % (username, password)) 

這在我的測試中也稍微快一點。

1

我們還添加了一個示例,演示如何在JavaScript中做到這一點:

https://github.com/apigee/api-platform-samples/tree/master/sample-proxies/base64encoder

+0

這工作。在將其手動合併到現有的Api-Proxy時,我必須通過將腳本附加到JavaScript策略來上傳腳本'enc-utf16-min.js,enc-base64-min.js,core-min.js'我後來刪除了......但不是在我需要引用它們的實際javascript策略中添加''標記之前,像這樣:https://github.com/apigee/api-platform-samples/blob/master/sample -proxy/base64encoder/apiproxy/policies/EncodeAuthHeader.xml – pulkitsinghal

+0

https://gist.github.com/pulkitsinghal/10946736 – pulkitsinghal