3

HTTPBuilder クラスを使用して XML データを URL に POST しようとしています。現時点で私は持っています:

def http = new HTTPBuilder('http://m4m:aghae7eihuph@m4m.fetchapp.com/api/orders/create')
http.request(POST, XML) {
body = {
        element1 {
            subelement 'value'
            subsubelement {
                key 'value2'
            }
        }
    }           

    response.success = { /* handle success*/ }
    response.failure = { resp, xml -> /* handle failure */ }
}

調べてみると、XML を本文として要求が行われていることがわかります。ただし、これには3つの問題があります。1 つ目は、従来の xml 行が省略されていることです。

<?xml version="1.0" encoding="UTF-8"?>

これは本文の上部に配置する必要があり、次にコンテンツ タイプが次のように設定されていません。

application/xml

最後に、XML の一部の要素について、属性を設定する必要があります。たとえば、次のようになります。

<element1 type="something">...</element1>

しかし、上記の形式でこれを行う方法がわかりません。誰にも方法がわかりませんか?それとも別の方法ですか?

4

1 に答える 1

5
  1. XML 宣言行を追加するにmkp.xmlDeclaration()は、マークアップの先頭に挿入します。
  2. ContentType.XMLrequest の 2 番目のパラメーターとして渡すと、Content-Typeヘッダーが に設定されapplication/xmlます。なぜうまくいかないのかわかりませんが、application/xml代わりに文字列を使用してみてください。
  3. 要素に属性を設定するには、マークアップ ビルダーで次の構文を使用します。element1(type: 'something') { ... }

次に例を示します。

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.2')
import groovyx.net.http.*

new HTTPBuilder('http://localhost:8080/').request(Method.POST, ContentType.XML) {
    body = { 
        mkp.xmlDeclaration()
        element(attr: 'value') {
            foo { 
                bar()
            } 
        }
    }
}

結果の HTTP 要求は次のようになります。

POST / HTTP/1.1
Accept: application/xml, text/xml, application/xhtml+xml, application/atom+xml
Content-Length: 71
Content-Type: application/xml
Host: localhost:8080
Connection: Keep-Alive
Accept-Encoding: gzip,deflate

<?xml version='1.0'?>
<element attr='value'><foo><bar/></foo></element>
于 2012-06-13T15:30:31.847 に答える