UTL_HTTP - 需要停止转义保留的字符

时间:2016-11-17 16:30:58

标签: oracle plsql

我有一个REST WebService和一个PLSQL包,我想从中调用WebService。 调用的参数位于WebService的URI中。

htttp://myservice:8080/some/path/action?value1=123456&value2=some chars&value3=aGermanSonderzeichenCalledÄ

如您所见,URI存在2个问题。首先是value2的空格,然后是value3的特殊字符。

也就是说,我很清楚URI必须编码为更友好的格式。 WebService需要UTF-8,因此URI编码为: UTL_URL.ESCAPE(url,false,'UTF-8')

这导致以下URI:

htttp://myservice:8080/some/path/action?value1=123456&value2=some%20chars&value3=aGermanSonderzeichenCalled%C3%84

到目前为止,这么好。此编码的URI将传递给UTL_HTTP.BEGIN_REQUEST(url,'GET')

当我执行此请求并使用Wireshark拦截它时,我可以看到被调用的实际URI是:

htttp://myservice:8080/some/path/action?value1=123456&value2=some%2520chars&value3=aGermanSonderzeichenCalled%25C3%2584

我们可以看到,UTL_HTTP将保留字符'%'转义为%25。 所以在我的情况下,空格首先转换为%20,之后转换为%2520。

我正在寻找的是阻止UTL_HTTP转义保留字符的方法。 作为替代方案,UTL_HTTP在没有调用UTL_URL的情况下处理空白和特殊字符的方式对我来说也很有用。

0 个答案:

没有答案