让我们以这个URL为例
https://<ip>/restconf/data/Cisco-IOS-XE-native:native/interface/GigabitEthernet=1如果我使用内部库向类似的端点发送请求,我们一直在使用的服务器不理解它,因为=被编码为%3D,但是使用curl在CLI上发出相同的请求很好。
我不明白为什么这是个问题,不是应该在URL中编码吗?这与库将其作为查询处理有关吗?
发布于 2022-11-22 10:05:54
=在RESTCONF URI中表示具有特殊意义的特殊字符。如果你把它编码为%3D,你就去掉了这个特殊的意思,并把它简化成一个字符。只有当一个列表的键值或叶列表的值包含这个字符并且在URI中引用这样一个实例时,您才会这样做。
您只允许在引用列表和叶列表实例时使用=,并且在使用它时不对其进行百分比编码。
在您的示例中,GigabitEthernet应该表示一个列表/叶列表,它的键/类型接受1作为有效值。native和interface都是(而且只能是)容器(或anydata)。
RFC8040,第3.5.3节,在请求URI中编码数据资源标识符详细描述了这一点。
以下是同一节中的示例:
示例: 容器顶部{ list list1 { key "key1 key2 key3";.列表list2 {键"key4 key5";叶X{类型字符串;}叶-列表Y{类型uint32;} 对于上述YANG定义,容器"top“在”示例顶“YANG模块中定义,叶"X”的目标资源URI将编码如下: /restconf/data/示例-top:top/list1=key5 1,key2,key5 3/list2=key5 4,key5 5/X 对于上述YANG定义,叶列表"Y“的目标资源URI编码如下: /restconf/data/example-top:top/Y=instance-value 下面的示例演示如何在键值中对保留字符进行百分比编码。"key1“的值包含逗号、单引号、双引号、冒号、双引号、空格和正斜杠(,‘:”/)。请注意,双引号不是保留字符,不需要进行百分比编码."key2“的值是空字符串,"key3”的值是字符串"foo“。 示例URL: /restconf/data/example-top:top/list1=%2C%27"%3A"%20%2F,、foo
请特别注意最后一个示例。如果=的键值出现在list1=之后,则需要对其编码百分比。
还请注意,这些不是查询的一部分--它们是路径段(RFC3986术语)。
https://stackoverflow.com/questions/74515905
复制相似问题