2011-07-05 10 views
20

基本認証でgroovyのhttp-builderを使用する場合、デフォルトでは認証されていない要求を最初に送信し、最初に401を受信した後に認証情報で要求を再送信します。 ApacheのHttpclientは、最初の要求時に資格情報を直接送信するようにpreemptive authenticationを提供しています。 Groovyのhttpビルダーでどのようにプリエンプティブ認証を使用できますか?任意のコード例が評価されます。groovy http-builderをプリエンプティブモードで使用する

答えて

31

JIRA issueに基づいて、あなたはそのような何かを行うことができます。

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

正確に100%でそれグルーヴィーなスタイルを解決することができます。どうも! –

+1

がきれいです。私は、Spring Security Grailsプラグインとプリエンプティブモードを設定しない基本認証で、間違った(一見無害だが厄介な)500のエラーを受けていました。これで修正されました。私は、次のインポートを追加する必要がありました注意:また 輸入org.apache.http.HttpRequestInterceptor 輸入org.apache.http.protocol.HttpContext 輸入org.apache.http.HttpRequest – ed209

28

また、私が探していたもの

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

、 'GetBytesメソッド( 'ISO-8859-1 1 ') 'は単に' bytes'で置き換えることができます。 –

+0

他に何も私のために働いたことはありません。あなたはアップヴォートを手に入れます。 –

関連する問題