使用 HTTPBuilder/Groovy 处理“分块”编码响应
-
25-09-2019 - |
题
我刚开始使用 groovy,并开始使用它来测试一些 REST 服务。由于“ prolog中的内容不允许”,我对我们服务的XML响应进行解析。一段时间后,我遇到了一篇文章,说一开始可能会有一个字节订单标记。为了补偿,我按照他们的方法修剪第一个 < 之前的字符,然后解析响应。虽然这有效,但我还被告知问题是响应返回为“传输编码:”分块”。
使用 HTTPBuilder,有没有办法在不修剪字符的情况下处理分块响应?如果我尝试:
def http = new HTTPBuilder('url')
http.request( Method.valueOf("GET"), XML )
我收到“序言消息中不允许内容”。然而:
http.request( Method.valueOf("GET"), TEXT )
可以工作,但需要在将响应发送到 XmlParser 之前修剪文本直到第一个 <。
解决方案
我有同样的问题,当我需要与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));
其他提示
HTTPBuilder 类有一个 设置内容编码() 方法允许您指定响应的内容类型。
也许是这样的:
http.contentEncoding = ContentEncoding.Type.GZIP
http.request( Method.GET, XML)
希望这可以帮助。
我是有这个问题以及击球通过https IIS服务器。这里是一个小除了维姆Deblauwe的答案POST请求。你必须比你在响应预计请求发送不同的类型。
发送POST用XML作为请求类型和文本作为响应类型。然后,分析文本响应为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));
不隶属于 StackOverflow