Обработка чанкованного закодированного ответа с помощью HTTPBuilder / Groovy - PullRequest
3 голосов
/ 18 ноября 2010

Я новичок в использовании groovy и начал использовать его для тестирования некоторых служб REST.У меня возникла проблема с анализом моего XML-ответа от нашего сервиса из-за того, что «Содержание не разрешено в прологе».После некоторого поиска я наткнулся на сообщение о том, что в начале может быть маркер порядка байтов.Чтобы компенсировать это, я следовал их подходу, чтобы обрезать символы перед первым <и затем проанализировать ответ.Хотя это работает, мне также сказали, что проблема заключается в том, что ответ возвращается как «Transfer-Encoding: chunked».</p>

Используя HTTPBuilder, есть ли способ обработки фрагментированных ответов без отключения символов?Если я попытаюсь:

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

, я получу сообщение «Содержание не разрешено в прологе».Однако:

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

Работает, но требует обрезки текста до первого <перед отправкой ответа в XmlParser.</p>

Ответы [ 3 ]

0 голосов
/ 04 октября 2012

У меня была такая же проблема, когда мне нужно было взаимодействовать с сервером IIS.Возвращенный XML имел поддельный символ перед фактическим 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 голосов
/ 21 марта 2013

У меня тоже была эта проблема при подключении к серверу IIS через https.Вот небольшое дополнение к ответу 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));
0 голосов
/ 20 февраля 2012

В классе HTTPBuilder есть метод setContentEncoding (), который позволяет указать тип содержимого ответа.

Может быть что-то вроде:

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

Надеюсь, это поможет.

...