Gradle脚本调用REST Web服务,而不使用任何第三方插件和指针?

Gradle脚本调用REST Web服务,而不使用任何第三方插件和指针?,rest,groovy,gradle,Rest,Groovy,Gradle,嗨,我需要调用REST服务作为构建脚本(Gradle)的一部分,而不需要任何第三方插件,我如何使用Groovy来实现这一点 (我的第一次尝试) 在没有外部库的情况下从groovy调用REST的最简单方法是执行CURL。下面是调用Artifactory、获取JSON并对其进行解析的示例: import groovy.json.JsonSlurper task hello { def p = ['curl', '-u', '"admin:password"', "\"http://loca

嗨,我需要调用REST服务作为构建脚本(Gradle)的一部分,而不需要任何第三方插件,我如何使用Groovy来实现这一点

(我的第一次尝试)


在没有外部库的情况下从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)
}
这是工作人员

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"

        }
    }
}
你就不能这么做吗

new URL( 'http://username:password@myserver.com:8983/solr/select?q=*&wt=json' ).text
我正在使用它,它看起来非常简单且与操作系统无关:

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']
import groovy.json.JsonSlurper
字符串url=”http:///api/qualitygates/project_status?projectKey=first"
def json=new JsonSlurper().parseText(url.toURL().text)
打印json['projectStatus']['status']

这个问题在搜索引擎上的排名如此之高,以至于我一直在犹豫

然而,正如其他人评论的那样,我并不真正喜欢公认的答案,因为它依赖于旋度

下面是一个完整的示例,没有任何先决条件(没有插件,没有卷曲,…):


您可以在您的机器上运行它,因为它们使用公共开发API。

您正在调用什么方法?如果得到了,就很容易;-)是的,这是一个很好的例子。这段代码在我想做的事情附近吗存储库{mavenCentral()}依赖项{complie“org.codehaus.groovy.modules.http builder:http builder:http builder:0.5.2”}任务hello{def http=new HTTPBuilder(“*&wt=json”)http.auth.basic'username',password'http.request(GET,json){req->}'此解决方案依赖于系统。@Opal只要它涵盖Linux、MacOs和Windows,我就同意。-1,您使用外部工具(CURL)避免了外部库。Gradle的所有设置都是自动下载和安装库,但它不会对CURL做同样的事情。这不是,也不是编程奥运会。我的解决方案以尽可能简单的方式完成工作,特别是考虑到RESTAPI缺乏良好的Groovy库(HttpBuilder没有那么好)。@JBaruch没有特别之处,也没有个人冒犯。但我注意到1)你给出了一个不符合要求的草率回答;2) 然后你花时间亲自批评其他答案,幸灾乐祸地认为你的答案更好;3) 你没有看到明显的缺陷,那就是重新引入了格拉德想要解决的问题,当伊恩提到这个问题时,你用反复无常的方式嘲笑了他/她。所以我给了一个-1作为对任何遵循这条路线的人的警告(你现在知道这条路线不会有任何结果),并给了一个简短的评论——因为我不喜欢不给出理由就投反对票。难道你不想在没有第三方工具和简单工具的情况下这样做吗?比较一下你和我的答案中的代码量。我可以让你的代码正常工作,所以我写了这个,相信我,我不会为此感到骄傲,你能给我一个完整的代码示例,包括所有的导入吗?感谢您的帮助我在哪里可以看到其他示例,例如,如何使用标题获取请求?另外build.dependsOn=['hello']应该在终端上打印我的smth,不是吗?因为现在不是这样,我添加了一个加号,表示不需要卷发。问题是关于一般的休息,不是特别的GET,所以我想curl更适合这样做。有没有一种方法可以将编码/字符集添加到这种请求中?这个答案忽略了这个问题,原因与上面的答案相同。另外,JsonSlurper与这个问题几乎没有任何关系。这个答案对我来说似乎很好。HTTP GET的
url.toURL().text
没有任何新的repo或导入依赖项。OP确实说他们想“调用REST服务”,这意味着JSON。@ThomasHirsch您可能应该链接到答案,因为投票倾向于重新定位他们。
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']
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}"
    }
}