使用HTTPBuilder / Groovy处理'chunked'编码响应

时间:2010-11-18 00:52:32

标签: groovy xml-parsing chunked-encoding httpbuilder

我是使用groovy的新手,并开始使用它来测试一些REST服务。由于“prolog中不允许内容”,我在解析服务中的XML响应时遇到问题。经过一段时间的搜索,我发现一篇帖子说开头可能有一个字节顺序标记。为了补偿我跟随他们的方法在第一个<之前修剪字符。然后解析响应。虽然这有效,但我还被告知问题是响应将回复为“转移编码:分块”。

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

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

我得到'prolog消息中不允许的内容。但是:

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

工作,但需要修剪文本,直到第一个<在将响应发送到XmlParser之前。

3 个答案:

答案 0 :(得分:0)

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

可能是这样的:

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

希望这有帮助。

答案 1 :(得分:0)

当我需要与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 :(得分:0)

我遇到此问题以及通过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));