数据操作的 URI (URL) 形式编码
笔记: 本文适用于 Function、Genesys Cloud、Google、Microsoft Dynamics 365、Salesforce、Web 服务和 Zendesk 数据操作集成。
某些 API,尤其是登录 API,需要对 HTTP 请求进行 URL 形式编码。 要配置 URI 编码的 Genesys Cloud 数据操作:
-
创建一个
Content-Type
请求标头的值x-www-form-urlencoded
。 -
设置请求正文模板在用户界面中,或
requestTemplate
在 JSON 或 Terraform 中,参数为以与号 (&) 分隔的键值对。例如,key1=value1&key2=value2
。注意: 请求正文不是 JSON,它是一个格式化为 URL 查询参数的字符串。 -
使用
$esc.uriEncode()
包含任何 URL 保留字符(例如 /)的值或变量? :@-。 _! ~ $ & ' ( ) * + , ; =。
json 示例
"config": { "request": { "requestTemplate": "grant_type=client_credentials&scope=customers_read_write&audience=$esc.uriEncode(\"https://api.example.com/v1/customers\")", "headers": { "Authentication": "Basic $encoding.base64(\"${credentials.clientid}:${credentials.clientSecret}\")", "Content-Type": "application/x-www-form-urlencoded" }, "requestType": "POST", "requestUrlTemplate": "${credentials.loginUrl}" } }
以下示例显示了具有保留字符的用户输入值:
"config": { "request": { "headers": { "Content-Type": "application/x-www-form-urlencoded" }, "requestUrlTemplate": "https://api.example.com/v1/customers", "requestTemplate": "description=$esc.uriEncode(\"${input.DESCRIPTION}\")&email=$esc.uriEncode(\"${input.EMAIL}\")", "requestType": "POST" } }
笔记:为了防止注入攻击,请始终使用
$esc.uriEncode()
与用户输入一起发挥作用。由于数据操作无法自动转义用户输入的特殊字符,因此出于安全目的您必须在适用的情况下使用该功能。虽然数据来自调用的实体(包括 Architect 或 Script),但在处理 URL 和 URL 表单时必须进行转义。 有关集成的更多信息,请参阅 关于数据操作集成。