RESTCONF/Yangdata端点URL编码兼容性问题求助
RESTCONF URL等号编码问题的原因与解决思路
首先得明确这个URL的结构:https://<ip>/restconf/data/Cisco-IOS-XE-native:native/interface/GigabitEthernet=1 里的GigabitEthernet=1是RESTCONF路径里的资源实例标识符,属于路径的一部分,不是?后面那种查询参数。
为啥编码后服务器不认?
- RESTCONF的规则里,这种
资源名=实例号的格式是用来定位列表型资源的具体条目(比如这里的1号千兆以太网口),这里的等号是协议规定的路径分隔符,根本不需要编码。 - curl发请求时会原封不动把路径传给服务器,服务器能正确解析这个等号的作用;但你的内部库犯了个错——它把路径里的等号当成了查询参数的键值分隔符(比如
?name=test里的等号),自动给编码成了%3D。 - 服务器收到
GigabitEthernet%3D1后,会把这串当成一个完整的资源名称,而不是GigabitEthernet加实例1,自然找不到对应的接口资源。
你可以自己测试验证:用curl发编码后的请求试试
curl https://<ip>/restconf/data/Cisco-IOS-XE-native:native/interface/GigabitEthernet%3D1
结果肯定和内部库请求一样失败,这就坐实是编码的锅。
怎么解决?
- 查内部库的配置,看有没有路径自动编码的开关,把这个功能关掉,或者设置成只编码路径里的特殊字符(比如空格、非ASCII字符),但保留等号。
- 如果库允许手动构造路径,直接把未编码的
GigabitEthernet=1拼进路径里,别让库自动处理。
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

