在scala中解析原始查询参数的最佳方法

时间:2017-08-16 16:55:30

标签: scala uri akka-http

我目前正在使用akka-http,并且我尝试解析包含原始uri字符串的Referer标头。我如何从中解析查询参数 他们没有编码的情况?

这里是uri的例子:

import akka.http.scaladsl.model.Uri

Uri("https://foo.bar?b=x y").query().toMap
Uri("https://foo.bar?a=%%_1_%%").query().toMap

他们都会抛出IllegalUriException。有一种优雅的方式吗?

2 个答案:

答案 0 :(得分:0)

你可以尝试导入它吗" akka.http.javadsl.model.headers.RawRequestURI"  让我知道。我正在搜索

答案 1 :(得分:0)

如果你愿意引入一个单独的库,scala-uri 可以用它的 NoopDecoder

但是要小心!如果 URL 包含原始百分比编码的原始 &,它将被解释为分隔新的查询参数

import io.lemonlabs.uri._
import io.lemonlabs.uri.config._
import io.lemonlabs.uri.decoding._

implicit val c = UriConfig(decoder = NoopDecoder)

Url.parse("https://foo.bar?b=x y").query.params
// val res4: Vector[(String, Option[String])] = Vector((b,Some(x y))

Url.parse("https://foo.bar?a=%%_1_%%").query.params
// val res3: Vector[(String, Option[String])] = Vector((a,Some(%%_1_%%)))

https://github.com/theon/scala-uri#url-percent-decoding