18

Scala では、プログラムでクエリ文字列パラメータを使用して URL を構築するにはどうすればよいですか?

また、クエリ文字列パラメーターを含む URL を解析してString、クエリ文字列パラメーターをプログラムで編集できる構造にするにはどうすればよいですか?

4

7 に答える 7

15

スプレーには非常に効率的な URI パーサーがあります。使用法は次のようになります。

import spray.http.Uri
val uri = Uri("http://example.com/test?param=param")

次のようにクエリ パラメータを設定できます。

uri withQuery ("param2" -> "2", "param3" -> 3")
于 2013-10-26T20:21:36.423 に答える
13

次のライブラリは、クエリ文字列パラメーターを使用して URL を解析および構築するのに役立ちます (免責事項: これは私自身のライブラリです): https://github.com/lemonlabsuk/scala-uri

クエリ文字列で URL を構築するための DSL を提供します。

val uri = "http://example.com" ? ("one" -> 1) & ("two" -> 2)

uri を解析して、パラメーターを次のMap[String,List[String]]ように取得できます。

val uri = parseUri("http://example.com?one=1&two=2").query.params
于 2012-11-19T22:23:50.010 に答える
4

Theon のライブラリはかなり良さそうです。しかし、急ぎのエンコード方法が必要な場合は、これがあります。オプションのパラメーターを処理し、また、 spray-jsonから JsValues を認識し、エンコードする前にそれらをコンパクトに出力します。(これらはたまたま私が心配しなければならない2つのことですが、特別な処理をしたい他のケースのためにマッチブロックを簡単に拡張することができます)

import java.net.URLEncoder
def buildEncodedQueryString(params: Map[String, Any]): String = {
  val encoded = for {
    (name, value) <- params if value != None
    encodedValue = value match {
      case Some(x:JsValue) => URLEncoder.encode(x.compactPrint, "UTF8")
      case x:JsValue       => URLEncoder.encode(x.compactPrint, "UTF8")
      case Some(x)         => URLEncoder.encode(x.toString, "UTF8")
      case x               => URLEncoder.encode(x.toString, "UTF8")
    }
  } yield name + "=" + encodedValue

  encoded.mkString("?", "&", "")
}
于 2013-05-02T23:29:16.923 に答える
0

こちらも便利です: https://github.com/mobiworx/urlifier

val url = (http || "some-domain".de) ? german & version(1) & foobar
url.toString
于 2014-08-27T06:32:22.880 に答える
0

ディスパッチはまだ言及されていません。

https://dispatchhttp.org/Defining+requests.html

val myRequest = host("somehost.com") / "some" / "path" <<? Map("id" -> "12345")
于 2014-02-25T08:40:08.540 に答える
0

KFoundation の URL クラスを試してください。ビルダーとパーサーの両方です。

例えば

val url1 = URL("http://exampel.net/path")
val url2 = url1/"subpath"        // -> http://exampel.net/path/subpath
val url3 = url2?("key"->"value") // -> http://exampel.net/path/subpath?key=value

API ドキュメント: https://mscp.co/resouces/apidoc/kfoundation/scala/0.3/net/kfoundation/scala/io/URL.html 依存関係: https://search.maven.org/artifact/net.kfoundation/ kfoundation-scala_2.13/0.3.1/jar

于 2021-03-15T14:01:19.773 に答える