2013-08-14 1 views
2

В Finagle, как создать запрос HTTP GET с параметрами безопасным, чистым способом?Установить параметры HTTP GET в Finagle

val request = RequestBuilder() 
    .url("http://www.example.com/test") 
    .addParameter("key", "value") // this doesn't exist 
    .buildGet() 
request // should be a GET request for http://www.example.com/test?key=value 

ответ

2

Аргументы, передаваемые RequestBuilder.url(), как ожидается, будет полностью сформирован, так надувать не дает какой-либо способ лавировать на несколько параметров запроса.

Одним из способов решения этой проблемы было бы создание объекта URL-адреса вне контекста сети RequestBuilder. Вы можете задать свои параметры запроса в Map, превратить его в строку запроса, а затем объединить его с базовой URL:

val paramStr = Map("key" -> "value", ...) map { case (k, v) => 
    k + '=' + v 
} mkString("?", "&", "") 

val request = RequestBuilder.safeBuildGet(
    RequestBuilder.create() 
    .url("http://www.example.com/test" + paramsStr) 
) 

Заметьте, что вам нужно закодировать любые параметры запроса, которые вы укажете в Map ,

+3

Это решение не экранировать специальные символы, верно? – duckworthd

-1

Вы можете безопасно создать запрос по этому пути:

import java.net.URL 
import com.twitter.finagle.http.{Http, RequestBuilder} 

val request = RequestBuilder() 
      .url(new URL("http://www.example.com/test?key=value")) 
      .setHeader("Content-Type", "application/json") //if you need 
      .buildGet() 
4

Вы можете использовать смешения названием Request.queryString:

val request = RequestBuilder() 
    .url(Request.queryString("http://www.example.com/test", Map("key" -> "value")) 
    .buildGet() 
Смежные вопросы