Client REST / HTTP integrato Groovy?

Ho sentito che Groovy ha un client REST / HTTP integrato. L’unica libreria che riesco a trovare è HttpBuilder , è questa?

Fondamentalmente sto cercando un modo per fare GET HTTP dall’interno del codice Groovy senza dover importare alcuna libreria (se ansible). Ma dal momento che questo modulo non sembra essere una parte del nucleo Groovy non sono sicuro di avere la giusta lib qui.

Se le tue esigenze sono semplici e vuoi evitare di aggiungere dipendenze aggiuntive potresti essere in grado di usare i metodi getText() che Groovy aggiunge alla class java.net.URL :

 new URL("http://stackoverflow.com").getText() // or new URL("http://stackoverflow.com") .getText(connectTimeout: 5000, readTimeout: 10000, useCaches: true, allowUserInteraction: false, requestProperties: ['Connection': 'close']) 

Se ci si aspetta dati binari di nuovo, esiste anche una funzionalità simile fornita dai newInputStream() metodi newInputStream() .

Native Groovy GET e 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()); } 

Il più semplice deve essere:

 def html = "http://google.com".toURL().text 

HTTPBuilder è. Molto facile da usare.

 import groovyx.net.http.HTTPBuilder def http = new HTTPBuilder('https://google.com') def html = http.get(path : '/search', query : [q:'waffles']) 

È particolarmente utile se hai bisogno di gestione degli errori e in genere più funzionalità rispetto al semplice recupero di contenuti con GET.

Puoi sfruttare le funzionalità di Groovy come con (), i miglioramenti a URLConnection e getter / setter semplificati:

OTTENERE:

 String getResult = new URL('http://mytestsite/bloop').text 

INVIARE:

 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. }) 

Nota: il POST inizierà quando proverai a leggere un valore da HttpURLConnection, come responseCode , inputStream.text o getHeaderField('...') .

Non penso che http-builder sia un modulo Groovy, ma piuttosto un’API esterna in aggiunta al client http di Apache, quindi è necessario importare classi e scaricare un sacco di API. È meglio usare Gradle o @Grab per scaricare il jar e le dipendenze:

 @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.* 

Nota: poiché il sito CodeHaus è andato giù, è ansible trovare il JAR all’indirizzo ( 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 } } }