11

パッチ プロセスを実行する Web アプリへの要求を実行する必要があります。このリクエストに、リクエストしているパラメーターを指定していますが、パッチ リクエストの前に実行しているログイン リクエストから認証情報を渡す方法がわかりません。ログイン応答のヘッダーから Cookie データを取得し、それを単純な文字列としてパッチ要求に渡そうとしていますが、それが正しい方法であるかどうかはわかりません。基本的に私がやっていることはこれです。

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();

私は Cookie データを取得および設定する方法に満足していませんが、ドキュメントにはそれを行うための適切な方法が見つかりません。

誰でも私を助けてください。

ありがとう。

4

1 に答える 1

12

Cookie をサポートしないのは、Unirest の意識的な設計上の決定のようです。Cookie サポートを追加するプルリクエストのコメントから:

REST API はステートレスである必要があるため、主流のクライアント ライブラリで Cookie をサポートすることは避けたいと思います..しかし、このプル リクエストを開いたままにしておくことで、誰かが Cookie を使用して API にアクセスする必要がある場合、彼はあなたのコードを使用できるようになります。 ;)

しかし、それをテストしていないので、カスタム HTTP クライアントで遊ぶのはうまくいくはずだという印象を受けました。これに似たものを試してみます

cookieStore = new org.apache.http.impl.client.BasicCookieStore();
Unirest.setHttpClient(org.apache.http.impl.client.HttpClients.custom()
                            .setDefaultCookieStore(cookieStore)
                            .build());
于 2015-03-09T21:50:34.817 に答える