2014-09-15 11 views
10

Devo eseguire una richiesta a un'app Web che esegue un processo di patch. Sto dando a questa richiesta i parametri che mi sta richiedendo, ma non so come passare le credenziali da una richiesta di accesso che sto eseguendo prima della richiesta di patch. Sto cercando di ottenere i dati dei cookie dalle intestazioni della risposta di accesso e di darli alla richiesta di patch come una semplice stringa, ma non sono sicuro se sia il modo giusto per farlo. Fondamentalmente quello che sto facendo è questo.Auth con Unirest JAVA

HttpResponse<JsonNode> respuesta = Unirest.post(urlLogin) 
    .headers(headers) 
    .fields(fields) 
    .asJson(); 
JSONObject body = respuesta.getBody().getObject(); 
Headers headerBody = respuesta.getHeaders(); 
String tmp = headerBody.get("set-cookie").get(0); 
this.cookie = "sd-touch-mode=false; ".concat(tmp.replace(";Path=/;HttpOnly","")); 
Map<String,String> cabeceras = new HashMap<String, String>(); 
cabecera.put("Cookie", this.cookie); 
HttpResponse<JsonNode> respuesta = Unirest.post(urlFixpack) 
    .headers(headers) 
    .fields(fields) 
    .asJson(); 

Io non sono proprio agio con il modo in cui sto ricevendo e impostare i dati del cookie, ma io non sto trovando nella documentazione alcun modo corretto di farlo.

qualcuno può aiutarmi per favore.

Grazie.

risposta

11

Sembra che non supportare i cookie sia una decisione di progettazione consapevole in Unirest. Dai commenti di un pull-request that adds cookie support:

A REST API dovrebbe essere senza stato, quindi vorrei evitare di supporto cookie nelle nostre librerie client tradizionali .. ma io non mancherà di tenere questa richiesta di pull aperta, quindi se qualcuno ha accesso un'API con i biscotti lui sarà in grado di utilizzare il proprio codice;)

Ma, senza prove, sono sotto l'impressione che playing with custom HTTP clients dovrebbe funzionare. Vorrei provare qualcosa di simile a questo

cookieStore = new org.apache.http.impl.client.BasicCookieStore(); 
Unirest.setHttpClient(org.apache.http.impl.client.HttpClients.custom() 
          .setDefaultCookieStore(cookieStore) 
          .build());