2011-07-05 15 views
20

Quando si utilizza il builder http di groovy con l'autenticazione di base, il comportamento predefinito è inviare prima una richiesta non autenticata e inviare nuovamente la richiesta con credenziali dopo aver ricevuto un 401 in primo luogo. Httpclient di Apache offre preemptive authentication per inviare le credenziali direttamente alla prima richiesta. Come posso usare l'autenticazione preventiva nel http-builder di Groovy? Qualsiasi esempio di codice è apprezzato.utilizzando groovy http-builder in modalità preventiva

risposta

31

Sulla base di un JIRA issue si può fare qualcosa di simile:

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

esattamente il 100% quello che ho cercare. grazie! –

+1

bellissimo. Stavo diventando corrotto (e apparentemente innocuo, ma fastidioso) 500 errori con il plugin Spring Security Grails e l'autenticazione di base senza set di modalità preventivi. Questo l'ha risolto. Nota ho dovuto aggiungere le seguenti importazioni: importazione org.apache.http.HttpRequestInterceptor importazione org.apache.http.protocol.HttpContext importazione org.apache.http.HttpRequest – ed209

28

È inoltre possibile risolverlo stile groove con

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

Inoltre, 'getBytes ('iso-8859- 1 ') 'può essere sostituito semplicemente da' byte'. –

+0

Nient'altro ha funzionato per me. Lei signore ottiene un upvote. –