当前位置: 首页 > news >正文

SAP-ABAP:SAP的‘cl_http_utility=>escape_url‘对URL进行安全编码方法详解

SAP的’cl_http_utility=>escape_url’对URL进行安全编码方法详解

核心作用:对 URL 进行安全编码,将特殊字符转换为 %XX 格式,确保符合 HTTP 传输规范。


1. 功能与作用

URL 安全编码
将非安全字符转换为十六进制 ASCII 码(%XX):

空格   → %20    中文 → %E4%B8%AD(UTF-8)
&     → %26    ?   → %3F

🚀 典型场景

  • 构造 GET 请求参数(?key=value
  • 传递含特殊字符的路径(如 file name.docx
  • 防御 URL 注入攻击

2. 语法与参数
CALL METHOD cl_http_utility=>escape_urlEXPORTING unescaped = lv_original_string  " 输入:原始字符串RECEIVING escaped   = lv_encoded_string.  " 输出:编码后字符串

3. 编码规则
字符类型处理方式示例
安全字符保留原样a-z/0-9/-/_
必须编码的符号转义为 %XX空格→%20, &%26
非 ASCII 字符UTF-8 编码后逐字节转义“中文” → %E4%B8%AD%E6%96%87

📌 关键细节

  • 路径分隔符 / 会被编码为 %2F
  • 不兼容 HTML 表单的空格转 + 规则(需手动处理)

4. 实际示例

场景:构造含中文和符号的 URL 参数

DATA: lv_name    TYPE string VALUE '张三 & 李四',lv_encoded TYPE string." 编码特殊字符
CALL METHOD cl_http_utility=>escape_urlEXPORTING unescaped = lv_name RECEIVING escaped   = lv_encoded. " 结果:%E5%BC%A0%E4%B8%89%20%26%20%E6%9D%8E%E5%9B%9B" 拼接完整 URL
DATA(lv_url) = |https://example.com/api?name={ lv_encoded }|.

解码操作

CALL METHOD cl_http_utility=>unescape_urlEXPORTING escaped   = lv_encoded RECEIVING unescaped = lv_name.  " 还原为'张三 & 李四'

5. 关键注意事项

⚠️ 字符集要求
源字符串 必须是 UTF-8 编码,否则中文字符会乱码!

🔄 编码方案对比

方法适用场景输出示例
escape_urlURL 参数%E4%B8%AD
encode_base64二进制数据(如图片)5Lit

常见陷阱

  • 双重编码:重复调用会生成 %25XX(如 %20%2520
  • 未编码导致截断param=value 1&name=a/b 中的空格和 & 会破坏 URL 结构

6. 最佳实践总结
  1. 强制编码:所有动态生成的 URL 参数必须调用此方法
  2. 字符集验证:确保系统环境支持 UTF-8
  3. 避免过度编码:仅需调用一次,不可嵌套使用
  4. 兼容性处理:若目标系统要求 + 代替空格,需额外转换:
    REPLACE ALL OCCURRENCES OF '%20' IN lv_encoded WITH '+'.
    

💡 应用场景
cl_http_client 请求、ICF 服务开发、RESTful API 调用中,此方法是保障 URL 传输安全的基石。

http://www.dtcms.com/a/285072.html

相关文章:

  • 6 基于STM32单片机的智能家居系统设计(STM32代码编写+手机APP设计+PCB设计+Proteus仿真)
  • 如何从 iPhone 向Mac使用 AirDrop 传输文件
  • 企业网络运维进入 “AI 托管” 时代:智能分析 + 自动决策,让云、网、端一眼看穿
  • 关于用git上传远程库的一些常见命令使用和常见问题:
  • Redis学习-02安装Redis(Ubuntu版本)、开启远程连接
  • ComfyUI 中RAM内存、VRAM显存、GPU 的占用和原理
  • 基于深度学习的图像识别:从零构建卷积神经网络(CNN)
  • 面对微软AD的安全隐患,宁盾身份域管如何设计安全性
  • Python调用父类方法的三种方式详解 | Python面向对象编程教程
  • 【DOCKER】-5 镜像仓库与容器编排
  • 云服务器如何设置防火墙和安全组规则?
  • Java EE进阶3:SpringBoot 快速上手
  • 【Linux】Makefile(二)-书写规则
  • 【原创】【图像算法】高精密电子仪器组装异常检测
  • 力扣119:杨辉三角Ⅱ
  • Cursor出现This model provider doesn’t serve your region解决方案
  • 【调度算法】
  • javaScript中数组常用的函数方法
  • 洛谷 P1601 A+B Problem(高精)
  • 重构比特币在 Sui DeFi 中的角色
  • Redis中什么是看门狗机制
  • 解决leetcode第3614题用特殊操作处理字符串II
  • 魔术公式轮胎simulink模型建立及参数拟合
  • 实现atm提款简易代码
  • ​​孤儿进程:当父进程先离开时会发生什么?
  • LeetCode|Day17|242. 有效的字母异位词|Python刷题笔记
  • 云服务器的数据如何备份和恢复?
  • Leetcode刷题营第二十八题:二叉树的前序遍历
  • CSS关键字:initial、revert、unset傻傻分不清
  • 打造智慧园区新生态