使用groovy和数据发送POST已经过URL编码

时间:2012-05-31 16:19:56

标签: http encoding groovy

我正在尝试使用Groovy HTTPBuilder发送POST,但我想发送的数据已经过URL编码,因此我希望HTTPBuilder按原样发布。我尝试了以下方法:

def validationString = "cmd=_notify-validate&" + postData
def http = new HTTPBuilder(grailsApplication.config.grails.paypal.server)
http.request(Method.POST) {
    uri.path = "/"
    body = validationString
    requestContentType = ContentType.TEXT

    response.success = { response ->
            println response.statusLine
    }
}

但它给了我一个NullPointerException:

java.lang.NullPointerException
at groovyx.net.http.HTTPBuilder$RequestConfigDelegate.setBody(HTTPBuilder.java:1200)

1 个答案:

答案 0 :(得分:6)

由于您使用的是预编码的表单值,因此无法使用默认的基于地图的内容类型编码器。您必须指定内容类型,以便EncoderRegistry知道如何处理正文。

您可以使用指定正文是URL编码字符串的内容类型创建HttpBuilder:

def http = new HTTPBuilder(url, ContentType.URLENC)

或者让请求明确传递内容类型:

http.request(Method.POST, ContentType.URLENC) {
  // etc.

作为参考,这是我如何弄清楚的 - 在我读这个问题之前我不知道。

我猜这总时间约为5-10分钟,比我输入的内容要短得多。但是,希望你能说服你,通过文档以相对较短的顺序找到这样的东西是

IMO这对开发人员来说是一项关键技能,可以让你看起来像个英雄。它很有趣。