Ich habe gehört, dass Groovy einen eingebauten REST / HTTP-Client hat. Die einzige Bibliothek, die ich finden kann, ist HttpBuilder , oder?
Grundsätzlich suche ich nach einer Möglichkeit, HTTP-GETs aus Groovy-Code heraus auszuführen, ohne Bibliotheken importieren zu müssen (wenn überhaupt möglich). Aber da dieses Modul nicht Teil von Groovy zu sein scheint, bin ich mir nicht sicher, ob ich hier die richtige Bibliothek habe.
rest
groovy
httpbuilder
smeeb
quelle
quelle
j = new groovy.json.JsonSlurper().parseText(new URL("https://httpbin.org/get").getText())
dann zusammenzufassenprintln j.headers["User-Agent"]
@Grab
, ist die Verwendung von http-builder ziemlich schmerzlos:@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7')
Antworten:
Native Groovy GET und 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()); }
quelle
Wenn Ihre Anforderungen einfach sind und Sie das Hinzufügen zusätzlicher Abhängigkeiten vermeiden möchten, können Sie möglicherweise die
getText()
Methoden verwenden, die Groovy derjava.net.URL
Klasse hinzufügt :new URL("http://stackoverflow.com").getText() // or new URL("http://stackoverflow.com") .getText(connectTimeout: 5000, readTimeout: 10000, useCaches: true, allowUserInteraction: false, requestProperties: ['Connection': 'close'])
Wenn Sie wieder Binärdaten erwarten, bieten die
newInputStream()
Methoden ähnliche Funktionen .quelle
Das einfachste muss sein:
def html = "http://google.com".toURL().text
quelle
Sie können Groovy-Funktionen wie with (), Verbesserungen an URLConnection und vereinfachte Getter / Setter nutzen:
ERHALTEN:
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. })
Beachten Sie , wird der POST starten , wenn Sie versuchen , einen Wert aus dem HttpURLConnection zu lesen, wie
responseCode
,inputStream.text
odergetHeaderField('...')
.quelle
close()
unddisconnect()
notwendig für die offene Verbindung? Gibt es eine einfache Möglichkeit, den Inhalt einer Datei über den http post outputstream zu übertragen?HTTPBuilder ist es. Sehr einfach zu bedienen.
import groovyx.net.http.HTTPBuilder def http = new HTTPBuilder('https://google.com') def html = http.get(path : '/search', query : [q:'waffles'])
Dies ist besonders nützlich, wenn Sie eine Fehlerbehandlung und im Allgemeinen mehr Funktionen benötigen, als nur Inhalte mit GET abzurufen.
quelle
Ich denke nicht, dass http-builder ein Groovy-Modul ist, sondern eine externe API über dem Apache-http-Client, sodass Sie Klassen importieren und eine Reihe von APIs herunterladen müssen. Verwenden Sie Gradle besser oder
@Grab
laden Sie das JAR und die Abhängigkeiten herunter:@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.*
Hinweis: Da die CodeHaus-Site nicht mehr verfügbar ist, finden Sie die JAR unter ( https://mvnrepository.com/artifact/org.codehaus.groovy.modules.http-builder/http-builder ).
quelle
URL
gemäß @ Johns Antwort verwenden@Grab
würde in der hinzugefügt werdengrails-app/conf/BuildConfig.groovy
. Dann würde es in Controllern, Diensten usw. funktionieren - aber bitte fügen Sie der Ansicht keinen solchen Code hinzu.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 } } }
quelle