использование groovy http-builder в вытесняющем режиме

При использовании http-builder groovy с базовой аутентификацией поведение по умолчанию заключается в том, чтобы сначала отправить неаутентифицированный запрос и повторно отправить запрос с учетными данными после получения 401 в первую очередь. Httpclient Apache предлагает упреждающую аутентификацию для отправки учетных данных непосредственно на первом запрос. Как я могу использовать упреждающую аутентификацию в http-Builder Groovy? Приветствуются любые примеры кода.


person Stefan Armbruster    schedule 05.07.2011    source источник


Ответы (2)


На основе выпуск JIRA, вы можете сделать что-то вроде этого:

def http = new RESTClient('http://awesomeUrl/')

http.client.addRequestInterceptor(new HttpRequestInterceptor() {
    void process(HttpRequest httpRequest, HttpContext httpContext) {
        httpRequest.addHeader('Authorization', 'Basic ' + 'myUsername:myPassword'.bytes.encodeBase64().toString())
    }
})

def response = http.get(path: "aResource")

println response.data.text
person Daniel    schedule 10.07.2011
comment
красивая. Я получал ошибочные (и, казалось бы, безобидные, но раздражающие) 500 ошибок с плагином Spring Security Grails и базовой аутентификацией без установленного упреждающего режима. Это исправило это. Примечание. Мне пришлось добавить следующие операции импорта: import org.apache.http.HttpRequestInterceptor import org.apache.http.protocol.HttpContext - person ed209; 18.02.2012

Вы также можете решить это заводным стилем с помощью

http = new RESTClient('http://awesomeUrl/')
http.headers['Authorization'] = 'Basic '+"myUsername:myPassword".getBytes('iso-8859-1').encodeBase64()
person towe75    schedule 07.03.2013
comment
Кроме того, getBytes('iso-8859-1') можно заменить просто bytes. - person David V; 18.04.2013
comment
@tweber, не могли бы вы уточнить: какова цель кодирования? это как-то требуется для base64? или по протоколу Basic auth? Изменить: хм, этот ответ, похоже, отвечает на мой вопрос. Хотя еще не заморачивался этим. Любой ответ будет оценен. - person andrybak; 27.11.2019