سؤال

أنا جديد في استخدام Groovy وبدأت في استخدامه لاختبار بعض خدمات REST. أواجه مشكلة في تحليل استجابة XML الخاصة بي من خدمتنا بسبب "المحتوى غير المسموح به في مقدمة". بعد البحث عن بعض الوقت ، صادفت منشورًا قائلًا إنه قد يكون هناك علامة ترتيب بايت في البداية. للتعويض ، اتبعت نهجهم لتقليص الشخصيات قبل أول <ثم تحليل الاستجابة. على الرغم من أن هذا يعمل ، قيل لي أيضًا أن القضية هي أن الاستجابة تعود إلى "ترميز النقل: مكثف".

باستخدام 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. هذا عمل بالنسبة لي.

في مروع:

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