2011-07-05 12 views
20

Al usar http-builder de Groovy con autenticación básica, el comportamiento predeterminado es enviar primero una solicitud no autenticada y volver a enviar la solicitud con credenciales después de recibir un 401 en primer lugar. Apache's Httpclient ofrece preemptive authentication para enviar las credenciales directamente en la primera solicitud. ¿Cómo puedo usar la autenticación preventiva en el generador de http de Groovy? Se aprecian todos los ejemplos de código.usando Groovy http-builder en modo preventivo

Respuesta

31

Basado en un JIRA issue se puede hacer algo así:

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 
+1

exactamente el 100% de lo que he buscar. ¡Gracias! –

+1

hermosa. Obtuve 500 errores errantes (y aparentemente inofensivos, pero molestos) con el plugin Spring Security Grails y la autenticación básica sin establecer el modo preventivo. Esto lo solucionó. Tenga en cuenta que tenía que añadir las siguientes importaciones: importación org.apache.http.HttpRequestInterceptor org.apache.http.protocol.HttpContext importación importación org.apache.http.HttpRequest – ed209

28

También puede resolverlo estilo maravilloso con

http = new RESTClient('http://awesomeUrl/') 
http.headers['Authorization'] = 'Basic '+"myUsername:myPassword".getBytes('iso-8859-1').encodeBase64() 
+1

Además, 'getBytes ('iso-8859- 1 ') 'puede ser reemplazado por simplemente' bytes'. –

+0

Nada más funcionó para mí. Usted señor obtén un voto favorable. –