Perfectly working curl command fails when executed in a groovy script

后端 未结 4 730
不思量自难忘°
不思量自难忘° 2021-02-02 11:08

I have a post commit hook (a groovy script) in gitblit to invoke a REST endpoint. In this script I am executing a curl command. But it seems to fail. The curl command works fine

相关标签:
4条回答
  • 2021-02-02 11:22

    In Curl Post -- In-F option - wrap the entire param with double quotes .Don't forget to escape the double quotes to get syntax right. Example Below:

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

    0 讨论(0)
  • 2021-02-02 11:31

    To avoid ‘running-forever’ process (this happens on some Windows env when output exceeds 4096 bytes) add initial size to ByteArrayOutputStream

    def initialSize = 4096
    def out = new ByteArrayOutputStream(initialSize)
    def err = new ByteArrayOutputStream(initialSize)
    def proc = command.execute()
    proc.consumeProcessOutput(out, err)
    proc.waitFor()
    
    0 讨论(0)
  • 2021-02-02 11:33

    I couldn't reproduce your problem with your example, but i will try a wild guess:

    First, use the list execute() version, so you don't have problems with tokens:

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

    Second, read both error and output from the process:

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

    The err may give out what is going on

    0 讨论(0)
  • 2021-02-02 11:38

    I was able to get this working by passing all the string in my curl command in an array. Following is how I did it.

    def response = ["curl", "-k", "-X", "POST", "-H", "Content-Type: application/json", "-d", "${json}", "https://username:password@myhost.com:9443/restendpoint"].execute().text
    
    0 讨论(0)
提交回复
热议问题