3

我正在尝试使用 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)
4

1 回答 1

6

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

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

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

或者使请求显式传递内容类型:

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

作为参考,我是这样想的——在我读到这个问题之前我不知道。

我猜总时间约为 5-10 分钟,比输入我所做的要短得多。不过,希望它能让你相信,通过文档可以在相对较短的时间找到这种东西。

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

于 2012-05-31T16:55:18.727 回答