2016-05-01 9 views
0

URLを正しくエンコードする:http://a.b.c/apis/POST /foo/barPOST /foo/barは、POST%20%2Ffoo%2Fbarとしてエンコードする必要があります。spray.http.Uri.Pathを正しくエンコードしますか?

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 

しかし、追加のパスフィールドとしてではなく、GET%20%2Ffoo%2Fbar上記のようにショー/foo/bar

は、ここに私が試したものです。

はまた、私が試した:

scala> Uri.Path("/apis/" + java.net.URLEncoder.encode("GET /foo/bar", "UTF-8")) 
res1: spray.http.Uri.Path = /apis/GET+%2Ffoo%2Fbar 

しかし、https://stackoverflow.com/a/2678602/409976当たり、空間がパス部に%20として符号化されるべきである(私は理解されるように)。また、%20ではなく+を使用している場合、私がアクセスしているWebサービスはHTTP-500を返します。

答えて

1
scala> Uri("http:/a.b.c").path/"apis"/"GET /foo/bar" 
res0: spray.http.Uri.Path = /a.b.c/apis/GET%20%2Ffoo%2Fbar 
関連する問題