You are viewing the documentation for the 2.1.5 release in the 2.1.x series of releases. The latest stable release series is 2.4.x.
§Play WS API
ときどき、Play アプリケーションから他の HTTP サービスを呼び出したくなることがあります。Play は非同期の HTTP 呼び出しを実現する play.api.libs.ws.WS
というライブラリでこれをサポートしています。
play.api.libs.ws.WS
による全ての HTTP 通信は、Play の非同期処理のメカニズムで処理される scala.concurrent.Future[play.api.libs.ws.Response]
を返します。
§HTTP 通信の開始
HTTP リクエストを送信するためには、まず WS.url()
を使って URL を指定します。その結果、例えばヘッダをセットする、といったような 各種 HTTP オプションを指定するためのビルダが返ってきます。最後に利用したい HTTP メソッドに対応するメソッドを呼び出します。例えば:
val homePage: Future[play.api.libs.ws.Response] = WS.url("http://mysite.com").get()
または、以下のように記述します。
val result: Future[ws.Response] = {
WS.url("http://localhost:9001/post").post("content")
}
§HTTP レスポンスの取得
HTTP 呼び出しは非同期で行われ、実際のコンテンツを取得するためには Promise[ws.Response]
を操作する必要があります。また、複数の Promise を合成して、最終的に Play サーバが直接的に処理できるように Promise[Result]
を返す、という方法も使えます。
def feedTitle(feedUrl: String) = Action {
Async {
WS.url(feedUrl).get().map { response =>
Ok("Feed title: " + (response.json \ "title").as[String])
}
}
}
§URL フォームエンコードされたデータの送信
URL フォームエンコードされたデータを送信するためには、Map[String, Seq[String]]
を post() に渡す必要があります。
WS.url(url).post(Map("key" -> Seq("value")))
§WS クライアントの設定
WSクライアントの設定には、以下のプロパティを使います。
ws.timeout
は接続、および、リクエストタイムアウトの両方をミリ秒で設定します。ws.followRedirects
は301、および、302 でのリダイレクトにクライアントが従うかを設定します。ws.useProxyProperties
はシステムhttpプロキシ設定(http.proxyHost、http.proxyPort)を使用するかを設定します。ws.useragent
は User-Agent ヘッダーフィールドを設定します。ws.acceptAnyCertificate
はデフォルトのSSLContextを使用すると失敗するように設定します。
def client
メソッドを使うと、クライアント本体にアクセスすることが可能になります。
次ページ: Play の OpenID サポート