Обработка «размноженного» кодированного ответа с HTPBuilder / Groovy

StackOverflow https://stackoverflow.com/questions/4210671

Вопрос

Я новичок, чтобы использовать Groovy и начал использовать его для проверки некоторых услуг отдыха. У меня есть проблема, анализирующая мой XML-ответ от нашего сервиса из-за «контента, запрещенного в прологе». После некоторого поиска я наткнулся на пост, говоря, в начале может быть маркер заказа байта. Чтобы компенсировать, я следовал за своим подходом, чтобы обрезать символы перед первым <, а затем анализировать ответ. Хотя это работает, мне также сказали, что вопрос состоит в том, что ответ возвращается в виде «трансфертации: CoSted».

Использование httpBuilder, есть ли способ обращаться с развязными ответами без отрезки символов? Если я попробую:

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

Я получаю «контент не допускается в прологе сообщение. Однако:

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

Работает, но требует отделки текста до первого <Перед отправкой ответа на XMLParser.

Это было полезно?

Решение

У меня была та же проблема, когда мне нужно было взаимодействовать с 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));

Другие советы

Класс httpBuilder имеет setcontentencoding.() Метод, который позволяет указывать тип содержимого ответа.

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

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

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

У меня была эта проблема, а также ударил IIS-сервер через HTTPS. Вот небольшое дополнение к ответу WIM DEBLAUWE на почтовый запрос. Вы должны отправить другой тип в запрос, чем вы ожидаете в ответе.

Отправьте сообщение с 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));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top