我是使用groovy的新手,并开始使用它来测试一些REST服务。由于“prolog中不允许内容”,我在解析服务中的XML响应时遇到问题。经过一段时间的搜索,我发现一篇帖子说开头可能有一个字节顺序标记。为了补偿我跟随他们的方法在第一个<之前修剪字符。然后解析响应。虽然这有效,但我还被告知问题是响应将回复为“转移编码:分块”。
使用HTTPBuilder,有没有办法处理分块响应而不删除字符? 如果我尝试:
def http = new HTTPBuilder('url')
http.request( Method.valueOf("GET"), XML )
我得到'prolog消息中不允许的内容。但是:
http.request( Method.valueOf("GET"), TEXT )
工作,但需要修剪文本,直到第一个<在将响应发送到XmlParser之前。
答案 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));