5

In Finagle, how do I create a request an HTTP GET request with parameters in a safe, clean way?

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
4

3 回答 3

9

您可以使用混淆命名Request.queryString

val request = RequestBuilder()
  .url(Request.queryString("http://www.example.com/test", Map("key" -> "value"))
  .buildGet()
于 2016-03-01T19:17:40.817 回答
2

传递给的参数RequestBuilder.url()应该是完整的,所以 Finagle 没有提供任何方法来附加更多的查询参数。

RequestBuilder解决这个问题的一种方法是在链的上下文之外构造一个 URL 对象。您可以在 a 中定义查询参数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.

于 2013-08-17T22:09:39.850 回答
-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()
于 2014-09-06T20:00:15.027 回答