2

認証トークンを Cookie として返すバックエンド サーバーにプログラムでログインし、その Cookie を使用してリクエストを送信する必要があります。私は Lift 2.4 で作業しており、私が読んだものはすべて http-dispatch の使用を推奨しているようですが、それを学ぶのは面倒でした! :-/ SBT バージョン (0.1-SNAPSHOT) と scala バージョン 2.9.1 のために、dispatch-classic で作業しています。そのため、現在ディスパッチ 0.8.6 ライブラリをロードしています。

https://groups.google.com/forum/#!msg/dispatch-scala/m7oWv2YAtjQ/imnkYoCDVUcJで以下を見つけました

Cookie を取得する場合:

レスポンスから Cookie を読み取るには、Response#getCookies メソッドを呼び出す必要があります。たとえば、次のようなことができます。

val res = Http(url("http://www.google.com/ig/api").addQueryParameter("weather", "Bonn, Germany"))
val response = for { r <- res } yield (r.getCookies, r.getResponseBody)

後続のリクエストに Cookie を追加する場合:

url("http://www.google.com/ig/api").addCookie(cookie)

しかし、私はこれを機能させることができません。私の好みは、ディスパッチ 0.8.6 で動作するコードですが、別のバージョンで動作させることができ、そのバージョンが私の SBT および scala/Lift バージョンで動作しないことがわからない場合は、推奨されているものを使用してみますライブラリ版。

4

1 に答える 1

2

Cookie を取得するには、次のようにする必要があります。

Http(url("http://www.google.com/ig/api") <<? List("weather" -> "Bonn, Germany") >:> ((h) => h.get("Set-Cookie")))

これは、URL を要求し、天気パラメーターを追加し、応答ヘッダーをハンドラー関数に渡します。ハンドラー関数は、ヘッダーを探して値と共にSet-Cookieを返すか、ヘッダーが存在しない場合に返します。OptionNone

Cookie を設定するには、次のようにします。

Http(url("http://www.google.com/ig/api") <<? List("weather" -> "Bonn, Germany") <:< Map("Set-Cookie" -> "something") >| )

Mapこれにより、次の<:<ディレクティブにヘッダーが追加されます。上記の場合、Cookie が含まれます。ハンドラーは>|単に応答を無視しますが、任意のハンドラーを使用できます。

このガイドは、利用可能なさまざまな関数とハンドラーの非常に優れたリファレンスです。

以前のバージョンを持っていないので、0.8.8 でこれをチェックアウトしましたが、すべてがうまくいくように見えました。確証はありませんが、0.8.6でも同じはずだと思います。

于 2013-09-10T00:20:05.710 に答える