使用Groovy HTTPBuilder POST XML数据(POST XML data with

2019-09-18 02:15发布

我想XML POST数据到使用HTTPBuilder类的URL。 目前,我有:

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个问题。 首先是,它忽略了经典的XML行:

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

其中有去在机身顶部,二来也是内容类型未设置为:

application/xml

然后最后,对于一些在XML我需要设置的属性,例如要素:

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

但我不知道如何做到这一点的格式以上。 有没有人有一个想法如何? 或者,也许另一种方式?

Answer 1:

  1. 要添加XML声明行插入mkp.xmlDeclaration()在您的标记的开始。
  2. 传递ContentType.XML作为第二个参数,以请求设置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>


文章来源: POST XML data with Groovy HTTPBuilder