3

私は groovy を初めて使用し、いくつかの REST サービスをテストするために使用し始めました。「プロローグで許可されていないコンテンツ」が原因で、当社のサービスからの XML 応答を解析する際に問題が発生しています。しばらく検索した後、最初にバイトオーダーマーカーがある可能性があるという投稿に出くわしました。補償するために、最初の < の前の文字をトリミングしてから応答を解析するという彼らのアプローチに従いました。これは機能しますが、応答が「Transfer-Encoding: chunked」として返されるという問題もあると言われました。

HTTPBuilder を使用して、文字を切り落とさずにチャンクされた応答を処理する方法はありますか? 私が試してみると:

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

「コンテンツはプロローグで許可されていません」というメッセージが表示されます。でも:

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

動作しますが、XmlParser に応答を送信する前に、最初の < までテキストをトリミングする必要があります。

4

3 に答える 3

0

この問題は、https経由でIISサーバーにアクセスするときにも発生していました。これは、POSTリクエストに対するWimDeblauweの回答に少し追加されたものです。リクエストでは、レスポンスで期待するものとは異なるタイプを送信する必要があります。

リクエストタイプとしてXML、レスポンスタイプとしてTEXTを使用してPOSTを送信します。次に、テキスト応答を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));
于 2013-03-21T02:07:01.090 に答える
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));
于 2012-10-04T12:56:54.080 に答える
0

HTTPBuilder クラスには、応答のコンテンツ タイプを指定できるsetContentEncoding () メソッドがあります。

たぶん次のようなもの:

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

お役に立てれば。

于 2012-02-20T17:05:39.583 に答える