2013-10-18 21 views
12

kullanıcının kimliğini gelmez Aşağıdaki kodu (hiçbir kimlik doğrulama hatası olur, ancak arama nedeniyle izinleri olmaması nedeniyle başarısız):HTTPBuilder temel auth neden çalışmıyor?

def remote = new HTTPBuilder("http://example.com") 
remote.auth.basic('username', 'password') 
remote.request(POST) { req -> 
    uri.path = "/do-something" 
    uri.query = ['with': "data"] 

    response.success = { resp, json -> 
     json ?: [:] 
    } 
} 

Ama şu çalışıyor:

def remote = new HTTPBuilder("http://example.com") 
remote.request(POST) { req -> 
    uri.path = "/do-something" 
    uri.query = ['with': "data"] 
    headers.'Authorization' = 
       "Basic ${"username:password".bytes.encodeBase64().toString()}" 

    response.success = { resp, json -> 
     json ?: [:] 
    } 
} 

Neden değilmi İlk çalışanı mı?

+2

nasıl başarısız oluyor yardımcı

protected final runGetRequest(String endpointPassedIn, RESTClient Client){ URIBuilder myEndpoint = new URIBuilder(new URI(Client.uri.toString() + endpointPassedIn)) HttpResponseDecorator unprocessedResponse = Client.get(uri: myEndpoint) as HttpResponseDecorator def Response = unprocessedResponse.getData() as LazyMap return Response } 

Umut farklı bir sınıfa kapsüllemek? Sunucu, temel kimlik doğrulamayı tetiklemek için bir HTTP 401 durum kodu döndürmelidir. HttpBuilder daha sonra Yetkilendirme başlığı ile ikinci bir istek gönderecektir. – ataylor

+0

Sadece çalışmıyor. İsteğin kendisi, kullanıcının işlemi gerçekleştirme iznine sahip olmadığını belirten bir mesajla döner. Kullanıcı adını ve şifreyi tamamen geçersiz bir şey olarak değiştirebilirim ve aynı şey olur. –

+2

Bu sorun muhtemelen sorununuzu çözecektir http://stackoverflow.com/questions/6588256/using-groovy-http-builder-in-preemptive-mode –

cevap

0

Sunucunuz tamamen HTTPBuilder-compilant değil gibi görünüyor. Bu durumu yakalamak ve kimlik doğrulama isteğini yeniden göndermek için HTTPBuilder için 401 kodu (REST sunucularının standart davranışı, ancak standart olmayanlar için başka bir standart) döndürmelidir. Bu konuda Here yazılmıştır.

1

Kafamın üstünden düşünebildiğim iki şey.

.setHeaders yönteminin bir harita gerektirir.
'Authorization' : "Basic ${"username:password".bytes.encodeBase64().toString()}"'u denediniz mi?

Değilse, Biraz daha fazla iş ve kod var, ancak URIBuilder'u da kullanabilirsiniz. Genellikle bu