【问题标题】:Play framework make http request from play server to "somesite.com" and send the response back to the browser播放框架从播放服务器向“somesite.com”发出http请求并将响应发送回浏览器
【发布时间】:2014-01-14 21:10:08
【问题描述】:

我正在使用 Scala 中的 Play 框架开发应用程序。我必须在我的应用程序中处理以下用例。

对于从浏览器到播放服务器的特定请求,播放服务器应向某个外部服务器(例如:somesite.com)发出 http 请求,并将此请求的响应发送回网络浏览器。

我已经编写了以下代码来将请求发送到控制器中的外部服务器。

val holder = WS.url("http://somesite.com")
val futureResponse = holder.get

现在我如何将从“somesite.com”收到的响应发回浏览器?

【问题讨论】:

    标签: scala playframework scala-2.10 playframework-2.2


    【解决方案1】:

    Play documentation for WS 中有一个示例,位于 Using in a controller 下;我已根据您的情况对其进行了调整:

    def showSomeSiteContent = Action.async {
      WS.url("http://somesite.com").get().map { response =>
        Ok(response.body)
      }
    }
    

    要注意的关键是 Future 的惯用用法是您从 get 调用返回的 map() - 一旦 Future 成功完成,此 map 块内的代码将被执行.

    Action.async“包装器”告诉 Play 框架您将返回一个 Future[Response],并且您希望 做必要的等待事情发生,如Handling Asynchronous Results documentation.

    【讨论】:

      【解决方案2】:

      您可能还对动态返回状态和内容类型感兴趣:

      def showSomeSiteContent = Action.async {
        WS.url("http://somesite.com").get().map { response =>
          Status(response.status)(response.body).as(response.ahcResponse.getContentType)
        }
      }
      
      • 如果您调用的 URL/服务无法正确应答,动态状态可能会有所帮助。
      • 如果您的 URL/服务可以根据某些动态参数返回不同的内容 HTML/XML...,则动态内容类型会很方便。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-10
        • 2018-03-05
        • 1970-01-01
        • 2013-08-13
        • 1970-01-01
        • 2018-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多