3

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

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

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

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

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

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

4

3 回答 3

0

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

也许是这样的:

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

希望这可以帮助。

于 2012-02-20T17:05:39.583 回答
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));
于 2012-10-04T12:56:54.080 回答
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));
于 2013-03-21T02:07:01.090 回答