Groovy intégré REST / client HTTP?
J'ai entendu que Groovy a un client REST/HTTP intégré. La seule bibliothèque que je peux trouver est HttpBuilder, est-ce?
fondamentalement, je suis à la recherche d'un moyen de faire HTTP obtient de l'intérieur du code Groovy sans avoir à importer des bibliothèques (si à tous les possibles). Mais comme ce module ne semble pas faire partie de core Groovy, Je ne suis pas sûr d'avoir la bonne lib.
7 réponses
si vos besoins sont simples et que vous voulez éviter d'ajouter des dépendances supplémentaires, vous pouvez utiliser le getText()
méthodes que Groovy ajoute à la java.net.URL
catégorie:
new URL("http://stackoverflow.com").getText()
// or
new URL("http://stackoverflow.com")
.getText(connectTimeout: 5000,
readTimeout: 10000,
useCaches: true,
allowUserInteraction: false,
requestProperties: ['Connection': 'close'])
si vous attendez des données binaires à l'arrière, il y a aussi des fonctionnalités similaires fournies par le newInputStream()
méthodes.
Native Groovy GET and POST
// GET
def get = new URL("https://httpbin.org/get").openConnection();
def getRC = get.getResponseCode();
println(getRC);
if(getRC.equals(200)) {
println(get.getInputStream().getText());
}
// POST
def post = new URL("https://httpbin.org/post").openConnection();
def message = '{"message":"this is a message"}'
post.setRequestMethod("POST")
post.setDoOutput(true)
post.setRequestProperty("Content-Type", "application/json")
post.getOutputStream().write(message.getBytes("UTF-8"));
def postRC = post.getResponseCode();
println(postRC);
if(postRC.equals(200)) {
println(post.getInputStream().getText());
}
Le plus simple obtenu d'être:
def html = "http://google.com".toURL().text
HTTPBuilder est-il. Très facile à utiliser.
import groovyx.net.http.HTTPBuilder
def http = new HTTPBuilder('https://google.com')
def html = http.get(path : '/search', query : [q:'waffles'])
il est particulièrement utile si vous avez besoin de gestion des erreurs et généralement plus de fonctionnalités que de simplement récupérer du contenu avec GET.
vous pouvez profiter des fonctionnalités Groovy comme avec (), des améliorations à URLConnection, et des getters/setters simplifiés:
GET:
String getResult = new URL('http://mytestsite/bloop').text
POST:
String postResult
((HttpURLConnection)new URL('http://mytestsite/bloop').openConnection()).with({
requestMethod = 'POST'
doOutput = true
setRequestProperty('Content-Type', '...') // Set your content type.
outputStream.withPrintWriter({printWriter ->
printWriter.write('...') // Your post data. Could also use withWriter() if you don't want to write a String.
})
// Can check 'responseCode' here if you like.
postResult = inputStream.text // Using 'inputStream.text' because 'content' will throw an exception when empty.
})
notez que le POST démarre lorsque vous essayez de lire une valeur de la connexion HttpURLConnection, telle que responseCode
, inputStream.text
, ou getHeaderField('...')
.
Je ne pense pas que http-builder soit un module Groovy, mais plutôt une API externe en plus de http apache-client vous devez donc importer des classes et télécharger un tas d'API. Vous êtes mieux à l'aide de Gradle ou @Grab
pour télécharger le jar et dépendances:
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1' )
import groovyx.net.http.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*
https://mvnrepository.com/artifact/org.codehaus.groovy.modules.http-builder/http-builder)
import groovyx.net.http.HTTPBuilder;
public class HttpclassgetrRoles {
static void main(String[] args){
def baseUrl = new URL('http://test.city.com/api/Cirtxyz/GetUser')
HttpURLConnection connection = (HttpURLConnection) baseUrl.openConnection();
connection.addRequestProperty("Accept", "application/json")
connection.with {
doOutput = true
requestMethod = 'GET'
println content.text
}
}
}