2010-11-18 86 views
3

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

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

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

我得到'内容不允许在序言消息。但是:

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

工作,但需要发送给XmlParser的响应之前修剪字符,直到第一个<。

+0

不幸的是,你的问题既不明确表示,也不*重复性*(由我)。你想发布一个[可重复的单元测试用例](http://svn.jremoting.codehaus.org/browse/~raw,r=831/gmod/httpbuilder/trunk/src/test/groovy/groovyx/net /http/HTTPBuilderTest.groovy)。 – robbbert 2010-11-18 16:39:31

+0

我想我有一个类似的问题: http://stackoverflow.com/questions/8760713/groovy-httpbuilder-getting-the-entity-content-from-a-gziped-chunked-response – serty2 2012-01-06 16:07:30

回答

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)); 
+0

这是很久以前的事了,但那也是我最终做的! – 2013-02-14 02:14:13

0

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

也许是这样的:

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

希望这有助于。

+0

我也有这个问题,这并没有帮助。 – 2012-10-04 12:54:57

0

我有这个问题,以及通过https击中一个IIS服务器。这里是Wim Deblauwe对POST请求的回答的补充。您必须在请求中发送不同于您预期的响应类型。

用XML发送一个POST作为请求类型和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));