POST with HTTPBuilder -> NullPointerException?

后端 未结 3 1922
终归单人心
终归单人心 2021-01-04 22:18

I\'m trying to make a simple HTTP POST request, and I have no idea why the following is failing. I tried following the examples here, and I don\'t see where I\'m going wrong

相关标签:
3条回答
  • 2021-01-04 22:49

    I've found it's necessary to set the content type before assigning the body. This works for me, using groovy 1.7.2:

    @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.0' )
    import groovyx.net.http.*
    import static groovyx.net.http.ContentType.*
    import static groovyx.net.http.Method.*
    
    def List<String> search(String query, int maxResults)
    {
        def http = new HTTPBuilder("mywebsite")
    
        http.request(POST) {
            uri.path = '/search/'
            requestContentType = URLENC
            headers.'User-Agent' = 'Mozilla/5.0 Ubuntu/8.10 Firefox/3.0.4'
            body = [string1: "", query: "test"]
    
            response.success = { resp, InputStreamReader reader ->
                assert resp.statusLine.statusCode == 200
    
                String data = reader.readLines().join()
    
                println data
            }
        }
        []
    }
    
    0 讨论(0)
  • 2021-01-04 22:58

    If you need to execute a POST with contentType JSON and pass a complex json data, try to convert your body manually:

    def attributes = [a:[b:[c:[]]], d:[]] //Complex structure
    def http = new HTTPBuilder("your-url")
    http.auth.basic('user', 'pass') // Optional
    http.request (POST, ContentType.JSON) { req ->
      uri.path = path
      body = (attributes as JSON).toString()
      response.success = { resp, json -> }
      response.failure = { resp, json -> }
    }    
    
    0 讨论(0)
  • 2021-01-04 23:10

    This works:

        http.request(POST) {
            uri.path = '/search/'
    
            send URLENC, [string1: "", string2: "heroes"]
    
    0 讨论(0)
提交回复
热议问题