2015-07-21 1 views
0

Я подключаюсь к API через Get call с использованием клиента спрея. Ниже приводится код, который:Spray - исключение IllegalURI

val response = HttpDialog(URI) 
    .send(Get(String.format("message=%s",message))) 
    .end 

Мое сообщение выше "Привет% 20 @ # $%, :() ~`!.?"

Но при подключении, я получаю IllegalUriException. Даже попытался использовать uri-parsing-mode = relaxed-with-raw-query в файле conf.

Ниже приводится StackTrace:

spray.http.IllegalUriException: Illegal URI reference, unexpected character  
',' at position 128: 
URI?message=Hi%[email protected]#$%,:().?~`                                
at spray.http.Uri$.fail(Uri.scala:775) ~[spray-http_2.11-1.3.2.jar:na] 
at spray.http.parser.UriParser.complete(UriParser.scala:429) ~[spray- 
http_2.11-1.3.2.jar:na] 
at spray.http.parser.UriParser.parseReference(UriParser.scala:60) ~[spray- 
http_2.11-1.3.2.jar:na] 
at spray.http.Uri$.apply(Uri.scala:231) ~[spray-http_2.11-1.3.2.jar:na] 
at spray.http.Uri$.apply(Uri.scala:203) ~[spray-http_2.11-1.3.2.jar:na] 
at 
spray.httpx.RequestBuilding$RequestBuilder.apply(RequestBuilding.scala:36) ~ 
[spray-httpx_2.11-1.3.2.jar:na] 
at 
spray.httpx.RequestBuilding$RequestBuilder.apply(RequestBuilding.scala:34) ~ 
[spray-httpx_2.11-1.3.2.jar:na] 

ответ

2

Поскольку вы используете запрещенные символы в query and fragment positions. Помогает преобразование в urlencoded string (Hi%2520!%40%23%24%25%2C%3A().%3F%7E%60).

+0

Обратите внимание, что вы можете использовать конструкторы 'Uri' для выполнения экранирования для вас, а не для этого« вручную ». – lmm