web-dev-qa-db-ja.com

GradleスクリプトRESTサードパーティのプラグインなしでWebサービスを呼び出すには、ポインタはありますか?

こんにちは、サードパーティのプラグインなしでbuildscript(Gradle)の一部としてRESTサービスを呼び出す必要があります。Groovyを使用してこれを行うにはどうすればよいですか?

(私の最初の試み)

repositories {
    mavenCentral()
}
      dependencies {  
            complie "org.codehaus.groovy.modules.http-builder:http-builder:0.5.2"  
    }  

task hello {
    def http = new HTTPBuilder("http://myserver.com:8983/solr/select?q=*&wt=json")
    http.auth.basic 'username', 'password'
    http.request(GET, JSON ) { req ->
    }
}
24
user2599381

外部ライブラリなしでgroovyからRESTを呼び出す最も簡単な方法は、CURLを実行することです。Artifactoryを呼び出し、JSONを取得して解析する例を次に示します。

import groovy.json.JsonSlurper

task hello {
    def p = ['curl', '-u', '"admin:password"', "\"http://localhost:8081/api/storage/libs-release-local?list&deep=1\""].execute()
    def json = new JsonSlurper().parseText(p.text)
}
13
JBaruch

できません

new URL( 'http://username:[email protected]:8983/solr/select?q=*&wt=json' ).text
18
tim_yates

これは働く人です

import Java.io.*
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.EncoderRegistry
import static groovyx.net.http.Method.*
import static groovyx.net.http.ContentType.*

buildscript {
    repositories {
        mavenCentral()
    }   
    dependencies {
        classpath 'org.codehaus.groovy.modules.http-builder:http-builder:0.5.2'
    }   
}

task hello {
    def http = new groovyx.net.http.HTTPBuilder("http://local.com:8983/solr/update/json")

    http.request(POST, JSON ) { req ->
        req.body{

        }
        response.success = { resp, reader ->
            println "$resp.statusLine   Respond rec"

        }
    }
}
12
user2599381

私は JsonSlurper を使用していますが、非常にシンプルでOSに依存しません:

import groovy.json.JsonSlurper

String url = "http://<SONAR_URL>/api/qualitygates/project_status?projectKey=first"
def json = new JsonSlurper().parseText(url.toURL().text)
print json['projectStatus']['status']
7
Zsolt

この質問は検索エンジンで非常によくランク付けされているので、私はつまずき続けています。

しかし、他の人がコメントしたように、受け入れられた答えはカールに依存しているため、私は受け入れられた答えがあまり好きではありません。

前提条件なしの完全な例は次のとおりです(プラグインもカールもありません)。

import groovy.json.JsonSlurper
import groovy.json.JsonOutput
task getExample {
    doLast {
        def req = new URL('https://jsonplaceholder.typicode.com/posts/1').openConnection()
        logger.quiet "Status code: ${req.getResponseCode()}"
        def resp = new JsonSlurper().parseText(req.getInputStream().getText())
        logger.quiet "Response: ${resp}"
    }
}
task postExample {
    doLast {
        def body = [title: "foo", body: "bar", userId: 1]
        def req = new URL('https://jsonplaceholder.typicode.com/posts').openConnection()
        req.setRequestMethod("POST")
        req.setRequestProperty("Content-Type", "application/json; charset=UTF-8")
        req.setDoOutput(true)
        req.getOutputStream().write(JsonOutput.toJson(body).getBytes("UTF-8"))
        logger.quiet "Status code: ${req.getResponseCode()}" // HTTP request done on first read
        def resp = new JsonSlurper().parseText(req.getInputStream().getText())
        logger.quiet "Response: ${resp}"
    }
}

パブリック開発APIを使用しているため、ボックスでこれを実行できます。

1
Yann Vo