在Finagle中,如何以安全,干净的方式创建带有参数的HTTP GET请求请求?
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
答案 0 :(得分:7)
您可以使用容易混淆的Request.queryString
:
val request = RequestBuilder()
.url(Request.queryString("http://www.example.com/test", Map("key" -> "value"))
.buildGet()
答案 1 :(得分:2)
传递给RequestBuilder.url()
的参数预计会完全形成,因此Finagle没有提供任何方法来处理更多查询参数。
解决此问题的一种方法是在RequestBuilder
链的上下文之外构造一个URL对象。您可以在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
。
答案 2 :(得分:-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()