§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 サポート
このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。