2015-04-01 1 views
9

Я использую API-интерфейс графика Facebook, и я называю его рамкой верблюда. Мой запрос имеет символы не ASCII (например, küçük). Я получаю следующее исключение: -Non ascii символов в URL param в camel

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) 

Поддерживает ли верблюд не символы ASCII в URI? Если нет, что еще можно сделать?

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

Читайте о кодировке url - это не проблема конкретного верблюда, а правила URL в целом. –

+0

@ClausIbsen Я ссылался на документ верблюда Apache (http://camel.apache.org/book-getting-started.html). В разделе «Значение URL, URI, URN и IRI» документ говорит, что URI верблюда может поддерживать буквы и цифры в наборе символов ASCII в США. Знаете ли вы способ, которым я могу попросить верблюда использовать IRI или любые другие варианты поддержки специальных символов? –

+0

У меня такая же проблема, любая помощь приветствуется. – Sid

ответ

1

Так это то, что мы смогли сделать, чтобы исправить эту проблему ,

В Apache Camel компонент HTTP_URI не принимает никаких специальных символов даже после их кодирования. Это ошибка в Camel, которая еще не закрыта.

К счастью для нас, специальные символы появлялись бы только в строке запроса URL-адреса, а не в главной части URI. Camel предоставляет еще один компонент HTTP_QUERY, который может успешно анализировать и понимать кодированные символы UTF-8. Установив его в заголовке, мы смогли избавиться от проблемы.

Итак, сначала сначала мы кодируем URL-адрес UTF-8, а затем устанавливаем значение HTTP_QUERY в качестве строки запроса. Это работало как прелесть. , например. (Scala)

.setHeader(Exchange.HTTP_QUERY, _.in[HttpRequest].uri.split(?).head) 
.setHeader(Exchange.HTTP_URI, _.in[HttpRequest].uri) 
+0

Camel поддерживает специальные символы в основной части URL. Недопустимая проблема с URI возникает, когда у нас есть специальные символы в части запроса URL. –

+0

Правильно, отредактируйте мой ответ. – Sid

5

«URL-кодировка заменяет символы без символов ASCII«% », за которыми следуют шестнадцатеричные цифры». (more info here)

Вы можете попробовать это:

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

или, может быть

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

Спасибо за ваш ответ, но это не помогло в контексте верблюда Apache. – Sid

0

Использование encodeURIComponent(url) будет работать

Смежные вопросы