camel中的URL参数中的非ascii字符

Pal*_*ale 10 apache-camel

我正在使用Facebook的图形API,我通过驼峰框架调用它.我的查询有非ASCII字符(例如küçük).我得到以下例外: -

Cause: 
org.apache.commons.httpclient.URIException: Invalid query
at org.apache.commons.httpclient.URI.parseUriReference(URI.java:2049)
at org.apache.commons.httpclient.URI.<init>(URI.java:147)
at org.apache.commons.httpclient.HttpMethodBase.getURI
at org.apache.commons.httpclient.HttpClient.executeMethod
at org.apache.commons.httpclient.HttpClient.executeMethod
at org.apache.camel.component.http.HttpProducer.executeMethod
at org.apache.camel.component.http.HttpProducer.process
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:122)
Run Code Online (Sandbox Code Playgroud)

camel是否支持URI中的非ASCII字符?如果没有,还可以做些什么?

example URL: https://graph.facebook.com/?ids=http://www.example.com/küçük
Run Code Online (Sandbox Code Playgroud)

Sid*_*Sid 0

这就是我们能够解决这个问题的方法。

在 Apache Camel 中,HTTP_URI 组件不接受任何特殊字符,即使在对它们进行编码之后也是如此。这是 Camel 中的一个错误,尚未修复。

对我们来说幸运的是,特殊字符只会出现在 URL 的查询字符串中,而不是主要 URI 部分。Camel提供了另一个组件HTTP_QUERY,它可以成功解析和理解编码的UTF-8字符。通过将其设置在标题中,我们能够解决这个问题。

因此基本上首先我们将 URL 编码为 UTF-8,然后将 HTTP_QUERY 值设置为查询字符串。这很有魅力。例如(斯卡拉)

.setHeader(Exchange.HTTP_QUERY, _.in[HttpRequest].uri.split(?).head)
.setHeader(Exchange.HTTP_URI, _.in[HttpRequest].uri)
Run Code Online (Sandbox Code Playgroud)