28

我在 gitblit 中有一个提交后挂钩(一个 groovy 脚本)来调用 REST 端点。在这个脚本中,我正在执行一个 curl 命令。但它似乎失败了。从命令行执行 curl 命令时可以正常工作。

以下是我的 groovy 脚本。

#!/usr/bin/env groovy


def repoUrl= "https://gitblit.myhost.com/git/" + repository + ".git"
json='{"repository":{"url":"'+repoUrl+'"}}'

def response = "curl -v -k -X POST -H \"Content-Type: application/json\" -d '${json}' https://username:password@anotherhost.com:9443/restendpoint".execute().text
println response 

存储库由 gitblit 传递给这个脚本,我已经验证过了。

有人可以帮我解决这个问题。

4

4 回答 4

30

我无法用你的例子重现你的问题,但我会尝试一个疯狂的猜测:

首先,使用列表execute()版本,这样你就不会遇到令牌问题:

process = [ 'bash', '-c', "curl -v -k -X POST -H \"Content-Type: application/json\" -d '${json}' https://username:password@anotherhost.com:9443/restendpoint" ].execute()

其次,从进程中读取错误和输出:

process.waitFor()
println process.err.text
println process.text

err可能会给出正在发生的事情

于 2014-05-19T20:03:07.570 回答
23

我可以通过将 curl 命令中的所有字符串传递到数组中来完成这项工作。以下是我的做法。

def response = ["curl", "-k", "-X", "POST", "-H", "Content-Type: application/json", "-d", "${json}", "https://username:password@myhost.com:9443/restendpoint"].execute().text
于 2014-05-20T10:48:17.117 回答
0

为避免“永远运行”过程(当输出超过 4096 字节时,在某些 Windows 环境中会发生这种情况)将初始大小添加到 ByteArrayOutputStream

def initialSize = 4096
def out = new ByteArrayOutputStream(initialSize)
def err = new ByteArrayOutputStream(initialSize)
def proc = command.execute()
proc.consumeProcessOutput(out, err)
proc.waitFor()
于 2014-05-20T07:31:58.720 回答
0

在 Curl Post - In-F 选项中 - 用双引号包裹整个参数。不要忘记转义双引号以获取正确的语法。下面的例子:

def response = "curl -u admin:admin -F\"jcr:content/par/address/address1=2/3 Market Place\" http://localhost:4502/content/datasource/branches ".execute().文本

于 2018-10-25T11:13:23.300 回答