Faire des requête HTTP en Scala
Je suis en train d'émettre un simple POSTE demande à un webservice qui renvoie XML en Scala.
Il semble que Envoi est la bibliothèque standard utilisé pour cette tâche, mais je ne trouve pas de documentation. Le site principal, qui je lien ci-dessus, explique à longueur de temps ce qui est une promesse et la façon de faire de la programmation asynchrone, mais ne fait pas de document de l'API. Il y a un tableau périodique - ce qui est un peu effrayant - mais il semble utile à des gens qui savent déjà de quoi faire et seulement besoin d'un rappel de la syntaxe cryptique.
Il semble également que Scalaz a une certaine facilité pour HTTP, mais je ne trouve aucune documentation pour qu'il soit.
- databinder.net/dispatch-doc
- Merci pour l'API. Depuis que je puisse en mesure de comprendre comment utiliser la bibliothèque. Encore, je voudrais avoir quelque chose d'intermédiaire, comme un haut niveau de description de l'API. J'imagine que quelque chose le long des lignes de "faire une requête POST, vous utilisez ce constructeur, avec ces paramètres, et ainsi de suite".
- Convenu que l'Expédition pourrait utiliser d'une meilleure documentation. Je pense que votre meilleur pari est de demander sur le Groupe Google: groups.google.com/forum/#!forum/expédition-scala
Vous devez vous connecter pour publier un commentaire.
J'utilise la suite: https://github.com/scalaj/scalaj-http.
Voici une simple requête GET:
et un exemple de POST:
Scalaj HTTP est disponible par le biais de SBT:
java.net.SocketTimeoutException: connect timed out
, puis ajouter une ligne comme.option(HttpOptions.connTimeout(10000))
"org.scalaj" %% "scalaj-http" % "1.1.4"
à construire.sbt.scala.io.Source.fromURL(url).mkString
? Je suppose que vous ne pouvez pas utiliser les en-têtes et quelques autres options - mais pour vraiment simple requête get, quoi d'autre avez-vous besoin?Vous pouvez utiliser spray-client. La documentation est incomplète (il m'a fallu un peu de creuser pour trouver comment faire des requêtes GET avec les paramètres de la requête), mais c'est une excellente option si vous êtes déjà à l'aide de pulvérisation. Et de la documentation est mieux que de l'envoyer.
Nous l'utilisons à AI2 sur envoi parce que les opérateurs sont moins symbolique et nous sommes déjà à l'aide de pulvérisation/acteurs.
Je suis à l'aide d'expédition: http://dispatch.databinder.net/Dispatch.html
Ils viennent de sortir une nouvelle version (0.9.0) avec une nouvelle api que j'aime vraiment. Et il est asynchrone.
Exemple de projet page:
edit: Cela pourrait vous aider à https://github.com/dispatch/reboot/blob/master/core/src/main/scala/requests.scala
dispatch
auteur a des problèmes avec les principaux doc à ce moment - hier, les docs ont été beaucoup mieux.val svc = url("http://diasporafoundation.org/").POST.setBody("test")
Une autre option est Typesafe de jeu ws, qui est le Jeu Cadre WS bibliothèque éclaté comme un autonome lib:
http://blog.devalias.net/post/89810672067/play-framework-seperated-ws-library
Je n'offrent pas nécessairement ce que la meilleure option, mais la peine de mentionner.
Pourquoi ne pas utiliser Apache HttpComponents ? Voici la application FAQ, qui couvre un large éventail de scénarios.
Si je peux faire un plug sans vergogne, j'ai une API appelée Bee-Client qui est tout simplement un wrapper en Scala de Java HttpUrlConnection.
J'ai dû faire la même chose pour tester un point de fin (en test d'Intégration). Donc voici le code pour aller chercher de réponse de la requête GET en Scala.
Je suis rendant l'utilisation de la scala.io.Source pour lire à partir d'extrémité et ObjectMapper json pour objet la conversion.
Et voici ma méthode d'essai pour la même
À l'aide de mon Demandes-Scala bibliothèque:
C'est aussi simple que
Ici est une classe que je travaillais. Il a à la fois GET et POST demandes.
Sans les paramètres de POST avec des paramètres
Je l'ai utilisé pour communiquer avec StreamSets afin de commencer un pipeline ou d'une case à une canalisation d'état.
il seulement besoin de la dépendance suivant dans la construction.sbt fichier:
Vous pouvez trouver de la documentation ici: https://github.com/scalaj/scalaj-http#post-raw-arraybyte-or-string-data-and-get-response-code