Dans Scala, comment construire une URL avec des paramètres de chaîne de requête par programme?
Aussi, comment puis-je analyser une String
contenant une URL avec des paramètres de chaîne de requête dans une structure qui me permet d’éditer les paramètres de chaîne de requête par programme?
La bibliothèque suivante peut vous aider à analyser et à construire des URL avec des paramètres de chaîne de requête (Avertissement: ceci est ma propre bibliothèque): https://github.com/lemonlabsuk/scala-uri
Il fournit un DSL pour la construction d'URL avec des chaînes de requête:
val uri = "http://example.com" ? ("one" -> 1) & ("two" -> 2)
Vous pouvez analyser un URI et obtenir les paramètres dans un Map[String,List[String]]
comme ceci:
val uri = parseUri("http://example.com?one=1&two=2").query.params
Spray a un analyseur URI très efficace . L'utilisation est comme si:
import spray.http.Uri
val uri = Uri("http://example.com/test?param=param")
Vous pouvez définir les paramètres de requête comme suit:
uri withQuery ("param2" -> "2", "param3" -> 3")
La bibliothèque de Theon a l'air jolie, Nice. Mais si vous voulez juste une méthode d'encodage rapide, j'ai celle-ci. Il traite des paramètres facultatifs et reconnaîtra également les valeurs Js de spray-json et les imprimera de manière compacte avant l'encodage. (Ce sont les deux choses qui me préoccupent, mais vous pouvez facilement étendre le bloc de match pour les autres cas auxquels vous souhaitez donner un traitement spécial)
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("?", "&", "")
}
L'expédition n'a pas encore été mentionnée.
http://dispatch.databinder.net/Dispatch.html
val myRequest = "http://somehost.com" / "some" / "path" <<? Map("id" -> "12345")
également utile: https://github.com/mobiworx/urlifier
val url = (http || "some-domain".de) ? german & version(1) & foobar
url.toString