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

时间:2015-04-01 13:34:41

标签: 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)

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

example URL: https://graph.facebook.com/?ids=http://www.example.com/küçük

3 个答案:

答案 0 :(得分:4)

“URL编码将非ASCII字符替换为”%“后跟十六进制数字。” (more info here

你可以试试这个:

URL url = new URL(uri.toASCIIString()); 

或者

String xstr = URLEncoder.encode("维", "utf-8");

答案 1 :(得分:0)

使用encodeURIComponent(url)它将起作用

答案 2 :(得分: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)
相关问题