正确编码 spray.http.Uri.Path?
Properly Encode spray.http.Uri.Path?
我想正确地 URL 编码:http://a.b.c/apis/POST /foo/bar
其中 POST /foo/bar
应该编码为:POST%20%2Ffoo%2Fbar
.
这是我尝试过的:
scala> import spray.http._
import spray.http._
scala> val base = Uri("http:/a.b.c")
base: spray.http.Uri = http:///a.b.c
scala> val path = Uri.Path("/apis/GET /foo/bar")
path: spray.http.Uri.Path = /apis/GET%20/foo/bar
scala> base.withPath(path)
res0: spray.http.Uri = http:///apis/GET%20/foo/bar
但是,上面显示 /foo/bar
作为附加路径字段,而不是 GET%20%2Ffoo%2Fbar
。
另外,我试过:
scala> Uri.Path("/apis/" + java.net.URLEncoder.encode("GET /foo/bar", "UTF-8"))
res1: spray.http.Uri.Path = /apis/GET+%2Ffoo%2Fbar
但是,根据 ,space 应该在路径部分编码为 %20
(据我所知)。此外,当使用 +
而不是 %20
时,我正在访问的 Web 服务 returns 是 HTTP-500。
scala> Uri("http:/a.b.c").path / "apis" / "GET /foo/bar"
res0: spray.http.Uri.Path = /a.b.c/apis/GET%20%2Ffoo%2Fbar
我想正确地 URL 编码:http://a.b.c/apis/POST /foo/bar
其中 POST /foo/bar
应该编码为:POST%20%2Ffoo%2Fbar
.
这是我尝试过的:
scala> import spray.http._
import spray.http._
scala> val base = Uri("http:/a.b.c")
base: spray.http.Uri = http:///a.b.c
scala> val path = Uri.Path("/apis/GET /foo/bar")
path: spray.http.Uri.Path = /apis/GET%20/foo/bar
scala> base.withPath(path)
res0: spray.http.Uri = http:///apis/GET%20/foo/bar
但是,上面显示 /foo/bar
作为附加路径字段,而不是 GET%20%2Ffoo%2Fbar
。
另外,我试过:
scala> Uri.Path("/apis/" + java.net.URLEncoder.encode("GET /foo/bar", "UTF-8"))
res1: spray.http.Uri.Path = /apis/GET+%2Ffoo%2Fbar
但是,根据 ,space 应该在路径部分编码为 %20
(据我所知)。此外,当使用 +
而不是 %20
时,我正在访问的 Web 服务 returns 是 HTTP-500。
scala> Uri("http:/a.b.c").path / "apis" / "GET /foo/bar"
res0: spray.http.Uri.Path = /a.b.c/apis/GET%20%2Ffoo%2Fbar