2010-11-18 85 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));