Обработка «размноженного» кодированного ответа с HTPBuilder / Groovy
-
25-09-2019 - |
Вопрос
Я новичок, чтобы использовать 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));