http - 使用 groovy 和数据发送 POST 已经进行了 URL 编码

标签 http encoding groovy

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

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)

最佳答案

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

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

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

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

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

作为引用,我是这样想出来的——在阅读这个问题之前我并不知道。

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

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

关于http - 使用 groovy 和数据发送 POST 已经进行了 URL 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10837461/

相关文章:

php - 流膨胀包装器?

http - 带有图像附件的 Julia HTTP POST 请求

http - 是否可以使用内容编码 : gzip in a HTTP POST request?

c# - 从字节数组到 base64 的转换以及返回

python - 如何在 python 的碎片中编码字符?

javascript - 如何在 node.js 中正确进行内容编码?

html - 如何使用Grails CacheHeaders插件设置响应头?

java - 使用 Groovy 使用 JSON 服务返回 List<Object>

delphi - 如何使用 Tidhttp 发出带有名为 xml 的参数的 Get 请求?

groovy - Grails Action 被两次调用。救命!