【问题标题】:Handling 'chunked' encoded response with HTTPBuilder/Groovy使用 HTTPBuilder/Groovy 处理“分块”编码响应
【发布时间】:2010-11-18 00:52:31
【问题描述】:

我刚开始使用 groovy,并开始使用它来测试一些 REST 服务。由于“prolog 中不允许内容”,我在解析来自我们服务的 XML 响应时遇到问题。经过一段时间的搜索,我发现一个帖子说开头可能有一个字节顺序标记。为了补偿,我按照他们的方法在第一个

使用 HTTPBuilder,有没有办法处理分块响应而不修剪字符? 如果我尝试:

def http = new HTTPBuilder('url')
http.request( Method.valueOf("GET"), XML )

我收到“序言消息中不允许的内容”。然而:

http.request( Method.valueOf("GET"), TEXT )

有效,但需要在将响应发送到 XmlParser 之前修剪文本直到第一个

【问题讨论】:

标签: groovy xml-parsing chunked-encoding httpbuilder


【解决方案1】:

当我需要与 IIS 服务器交互时,我遇到了同样的问题。返回的 XML 在 Web 服务器返回的实际 XML 前面有一个虚假字符。我是这样解决它的:

StringReader reader = builder.get( path: 'rcserver/systeminfo.xml', contentType: ContentType.TEXT )
def text = reader.getText()
def xml = new XmlSlurper().parseText(text.substring(1));

【讨论】:

  • 这是很久以前的事了,但我最终也是这么做的!
【解决方案2】:

HTTPBuilder 类有一个setContentEncoding() 方法,允许您指定响应的内容类型。

可能是这样的:

http.contentEncoding = ContentEncoding.Type.GZIP
http.request( Method.GET, XML)

希望这会有所帮助。

【讨论】:

  • 我也有这个问题,但没有帮助。
【解决方案3】:

我在通过 https 访问 IIS 服务器时也遇到了这个问题。这是 Wim Deblauwe 对 POST 请求的回答的一点补充。您必须在请求中发送与响应中预期不同的类型。

发送一个 POST,请求类型为 XML,响应类型为 TEXT。然后,将文本响应解析为 XML。这对我有用。

在 Groovy 中:

def reader = http.request(Method.POST, ContentType.TEXT){
    uri.path = "myPath.api"
    send ContentType.XML, postBodyXml
}
def text = reader.getText()
def resultxml = new XmlSlurper().parseText(text.substring(1));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-21
    • 2012-08-18
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    相关资源
    最近更新 更多