2016-04-03 8 views
0

私はLucidworks Fusion(2.1.2)で作業を開始しており、最も快適なハッキングはGroovyです。サイドノート:Pythonのリクエストはこれをシームレスに処理しましたが、私は頑固で、Pythonを使用したくありません...Groovyを使ってLucidworks Fusion(solr wrapper)APIに接続するにはどうすればよいですか?

Fusionは有望です私はGroovyでの作業を楽しみにしています。

Groovyを使用してFusionで認証されたFusion認証APIに接続するにはどうすればいいですか(groovy-ishの方法で)?

私はいくつかのアプローチを試しています基本的なRESTClientが他の「シンプルな」ソリューションと一緒に私にとってうまくいかない理由に関するフィードバックを歓迎します。ここで

は、私が試したものです:不正401(符号化の私は信じているから)で失敗し

groovyx.net.http.HTTPBuilder hb = new HTTPBuilder(FUSION_API_BASE) 
hb.auth.basic(user, pass) 

。私も試してみました

compile 'org.codehaus.groovy.modules.http-builder:http-builder:0.7.1' 

:HTTPBuilderはGradleのから来た

HttpPost httpPost = new HttpPost(url); 
List <NameValuePair> nvps = new ArrayList <NameValuePair>(); 
nvps.add(new BasicNameValuePair("username", "sean")); 
nvps.add(new BasicNameValuePair("password", "mypass")); 
httpPost.setEntity(new UrlEncodedFormEntity(nvps)); 
CloseableHttpResponse response2 = httpclient.execute(httpPost); 

となった。また、試してみました

{"code":"unauthorized"} 

を:投げ

String path = '/api/apollo/introspect' 
URL url = new URL('http', 'corp', 8764, path) 
try { 
    def foo = url.getContent() 
    log.info "Foo: $foo" 
} catch (IOException ioe){ 
    log.warn "IO ERR: $ioe" 
} 

(現在予想) IOError:401.誰かがもっと欲しいなら私の失敗のために私に知らせてください、そして、私は多分あなたにボリュームのある技術的な詳細を持っていました。

私は恥知らずに自分の質問に答えていますが、そこにある優雅な先生が私に少し教えてくれることを願っています。

要約すると、私が以下で見つけたよりも良い/面白い解決策がありますか?

答えて

0

私はその質問をし、私が見つけた解決策を投稿しています。私の最初の試みで逃したものを説明してくれることを願っています。ここで

は(以下すべての3つのソリューションがグーグルからですが、私はリンクを失い、私を突くこと自由に感じ、私はそれらを掘るだろう - オリジナルポスターへの賛辞を)私の好みのソリューションです:

String furl = "${FUSION_API_BASE}${path}" //http://localhost:8764/api/apollo/introspect 
RESTClient rc = new RESTClient(furl) 
rc.headers['Authorization'] = 'Basic ' + "$user:$pass".bytes.encodeBase64() 
//rc.headers['Authorization'] = 'Basic ' + "$user:$pass".getBytes('iso-8859-1').encodeBase64() 
def foo = rc.get([:]) 
log.info "Foo: $foo" 

また、別の作業溶液:

RESTClient rest = new RESTClient('http://localhost:8764/') 
HttpClient client = rest.client 
client.addRequestInterceptor(new HttpRequestInterceptor() { 
    void process(HttpRequest httpRequest, HttpContext httpContext) { 
     httpRequest.addHeader('Authorization', 'Basic ' + 'sean:mypass'.bytes.encodeBase64().toString()) 
    } 
}) 
def resp = rest.get(path : path) 
assert resp.status == 200 // HTTP response code; 404 means not found, etc. 
println resp.getData() 

自宅でスコアを維持するそれらのため、比較のためのpythonソリューション:

import requests 
from requests.auth import HTTPBasicAuth 
rsp = requests.get('http://corp:8764/api/apollo/introspect', auth=HTTPBasicAuth('sean', 'lucid4pass')) 
print "Response ok/status code: %s/%s", rsp.ok, rsp.status_code 
print "Response content: %s", rsp.content 

HTH、

ショーン

関連する問題