我正在使用apache commons HTTPClient来下载网络资源。这些资源的URI来自第三方,我不会生成它们。
公共httpclient需要将一个URI对象赋予GetMethod对象。
URI构造函数接受一个字符串(对于uri)和一个布尔值,指定它是否被转义。
目前,我正在执行以下操作以确定我获得的原始网址是否已经转义...
boolean isEscaped = URIUtil.getPathQuery(originalUrl).contains("%");
m.setURI(new URI(originalUrl, isEscaped));
这是确定uri是否已经转义的正确方法吗?
...更新
根据维基百科(嗯,根据维基百科(http://en.wikipedia.org/wiki/Percent-encoding),它说百分比是一个保留字符,应该始终编码...我在这里逐字引用...
百分比编码百分比字符[edit]因为百分比(“%”) 字符作为百分比编码八位字节的指示符,它必须 被百分比编码为“%25”,该八位字节用作a中的数据 URI。
这是否意味着您永远不会在有效的uri中拥有裸体'%'字符?
此外,uri(s)来自各种来源,所以我无法确定它们是否被转义或未转义。
答案 0 :(得分:1)
这不起作用。未编码的字符串可能已经包含%
。
例如:
https://www.google.com/#q=like%25&safe=off
是Google搜索like%
的网址。在未转义的形式中,它将是https://www.google.com/#q=like%&safe=off
如果URI被转义,您的消费者应该通知您。