2011-07-05 13 views
20

Khi sử dụng trình tạo http của groovy với xác thực cơ bản, hành vi mặc định là gửi yêu cầu chưa được xác thực trước và gửi lại yêu cầu bằng thông tin xác thực sau khi nhận được 401 ở địa điểm đầu tiên. Httpclient của Apache cung cấp preemptive authentication để gửi thông tin đăng nhập trực tiếp theo yêu cầu đầu tiên. Tôi làm cách nào để sử dụng auth preemptive trong trình tạo http của Groovy? Bất kỳ ví dụ mã nào đều được đánh giá cao.sử dụng trình tạo http groovy groovy ở chế độ ưu tiên

Trả lời

31

Dựa trên một JIRA issue bạn có thể làm một cái gì đó như thế:

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

chính xác 100% những gì tôi đã được tìm kiếm. cám ơn! –

+1

đẹp. Tôi đã nhận được errant (và dường như vô hại, nhưng gây phiền nhiễu) 500 lỗi với Spring Security Grails plugin và auth cơ bản mà không cần thiết lập chế độ preemptive. Điều này cố định nó. Lưu ý tôi đã có thêm hàng nhập khẩu như sau: nhập khẩu org.apache.http.HttpRequestInterceptor nhập khẩu org.apache.http.protocol.HttpContext nhập khẩu org.apache.http.HttpRequest – ed209

28

Bạn cũng có thể giải quyết nó theo phong cách hấp dẫn với

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

Ngoài ra, 'getBytes ('iso-8859- 1 ') 'có thể được thay thế bằng' byte' đơn giản. –

+0

Không có gì khác làm việc cho tôi. Bạn có được một upvote. –