HTTPBuilder / Groovyのでエンコードされた応答を「チャンク」取り扱い
-
25-09-2019 - |
質問
私はグルーヴィーを使用するための新たなんだといくつかのRESTサービスをテストするためにそれを使用し始めています。私が起因して当社のサービスからの私のXML応答を解析する問題が抱えている「プロローグで許可されていないコンテンツを。」しばらく検索した後、私は冒頭でバイト順マーカーがあるかもしれないと言ってポストに出くわしました。補うために私は最初の前の文字をトリム<し、応答を解析するために彼らのアプローチを行いました。この作品が、私はまた、問題が応答は「:チャンク転送エンコーディング」として戻って来ているということであると言われました。
HTTPBuilderを使用して、文字をオフにトリミングせずにチャンク応答を処理する方法は何ですか? 私がしようとした場合:
def http = new HTTPBuilder('url')
http.request( Method.valueOf("GET"), XML )
私はプロローグメッセージで許可されていない」のコンテンツを取得します。しかします:
http.request( Method.valueOf("GET"), TEXT )
作品が、XMLPARSERへの応答を送信する前に、<最初までテキストをトリミングが必要です。
解決
私は同じ問題がありました。 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));
他のヒント
HTTPBuilderクラスは、<のhref = "http://groovy.codehaus.org/modules/http-builder/apidocs/groovyx/net/http/HTTPBuilder.html#setContentEncoding%28java.lang.Objectを持っています.. 。あなたは、応答のコンテンツタイプを指定することができます%29" のrel = "nofollowを"> setContentEncoding を()メソッドます。
のように多分何かます:
http.contentEncoding = ContentEncoding.Type.GZIP
http.request( Method.GET, XML)
希望このことができます。
私はこの問題を持つだけでなく、HTTPS上でIISサーバーを打ちました。ここではPOSTリクエストのためのヴィムDeblauweの答えに少し追加です。あなたが受けて予想よりも要求に異なるタイプを送信する必要があります。
応答タイプとして要求タイプとTEXTとしてXMLで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));