2014-09-15 23 views
10

Ich muss eine Anfrage an eine Webanwendung ausführen, die einen Patch-Prozess ausführt. Ich gebe dieser Anfrage die Parameter, die sie anfordert, aber ich weiß nicht, wie ich die Anmeldeinformationen von einer Login-Anfrage, die ich vor der Patch-Anfrage ausführe, übergebe. Ich versuche, die Cookie-Daten aus den Headern der Login-Antwort zu bekommen und sie als einfache Zeichenfolge der Patch-Anfrage zu geben, aber ich bin mir nicht sicher, ob es der richtige Weg ist. Grundsätzlich was ich tue ist das.Auth mit 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(); 

Ich bin nicht zufrieden mit der Art, wie ich bin immer und die Cookie-Daten einstellen, aber ich bin nicht in der Dokumentation jeden richtigen Weg zu finden, es zu tun.

kann mir bitte jemand helfen.

Danke.

Antwort

11

Sieht aus, als wäre die Unterstützung von Cookies in Unirest eine bewusste Designentscheidung. Aus den Kommentaren eines pull-request that adds cookie support:

Ein REST API staatenlos sein sollte, so möchte ich Cookies Unterstützung in unseren Mainstream-Client-Bibliotheken vermeiden .. aber ich werde diese Pull-Anforderung offen halten, so dass, wenn jemand Zugang hat eine API mit Cookies er in der Lage sein wird, Ihren Code zu verwenden;)

Aber ohne es zu testen, ich habe den Eindruck, dass playing with custom HTTP clients funktionieren soll. Ich würde versuchen, etwas ähnliches zu diesem

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