Как создать сообщение HTTP с помощью Groovy HTTPBuilder RESTClient

Пример сообщения из документации не работает с http-builder 1.7.1. .

def msg = "I'm using HTTPBuilder's RESTClient on ${new Date()}"

def resp = twitter.post(
        path : 'update.json',
        body : [ status:msg, source:'httpbuilder' ],
        requestContentType : URLENC )

assert resp.status == 200
assert resp.headers.Status
assert resp.data.text == msg

def postID = resp.data.id

Исключением является

wslite.rest.RESTClientException: No such property: body for class: wslite.http.HTTPRequest

Троллинг API, не очевидно, как правильно построить пост. Есть идеи?


person jkschneider    schedule 22.08.2014    source источник


Ответы (2)


На основании исключения похоже, что вы используете библиотеку groovy-wslite, а не HTTPBuilder. Если это так, должно работать следующее:

def resp = twitter.post(path: 'update.json') {
    urlenc status: msg, source:'httpbuilder'
}
person John Wagenleitner    schedule 22.08.2014
comment
Библиотека Groovy http-builder использует wslite скрыто, но только для класса RESTClient. Класс HTTPBuilder в библиотеке http-builder использует apache http builder. Еще не запутались? - person jkschneider; 23.08.2014
comment
Ах хорошо. Если вы println twitter.getClass() что он отображает? Если ответ wslite.rest.RESTClient, то мой ответ все равно должен работать. - person John Wagenleitner; 23.08.2014
comment
Это натолкнуло меня на до неприличия простую проблему: неверный оператор импорта! Я должен был использовать groovyx.net.http.RESTClient - person jkschneider; 23.08.2014

Столкнулся с трудностями при вызове страницы с помощью httpbuilder, которая требует входа в систему. Поэтому делюсь своим рабочим кодом.

    def http = new HTTPBuilder("http://localhost:8080/")
        def query = [ username: "testUsername", password:"testPassword"]
            http.request(Method.POST,ContentType.URLENC) {
                uri.path = "user/signin"
                uri.query = query
                headers['Content-Type']= "application/x-www-form-urlencoded" 
                response.success = {resp-> println resp.statusLine }
            }

Надеюсь это поможет.

person Sanjay Bharwani    schedule 30.07.2015