【问题标题】:Forwarding HTTP requests in Play for Scala在 Play for Scala 中转发 HTTP 请求
【发布时间】:2016-11-13 03:28:49
【问题描述】:

这是我试图在 Play 2.5.x for Scala 中实现的场景(所有请求和响应都是 Json):

  1. 浏览器向 URL1 发送 HTTP 请求。
  2. URL1 用一些数据丰富它接收到的 Json,并将整个请求转发到 URL2。
  3. URL2 响应浏览器。

最后一点,我不确定 URL2 是否可以将其发送回浏览器或必须通过 URL1 进行(我相信是后者)。

这是 URL1 中的请求(URL2 是一个简单的请求/响应):

  val request: WSRequest = ws.url("/url2")
  val request2: WSRequest = request.withHeaders("Accept" -> "application/json")
  val data = Json.obj(
        "aaa" -> some_data1,
        "bbb" -> some_data2
   )
   val futureResponse: Future[JsValue] = request2.post(data).map {
            response => response.json
   }

当我发送未来时,我得到了这个异常:

Execution exception[[NullPointerException: scheme]]

如何解决这个问题?

【问题讨论】:

    标签: scala playframework playframework-2.0


    【解决方案1】:

    线索在函数名中——它是ws.url,而不是ws.uri。您需要指定完整的路径。您可以使用ws.url("http://localhost:9000/url2"),如有必要,可以使用自定义元素,例如基于您的配置的方案和端口。

    【讨论】:

    • 谢谢,我做了您建议的更改,异常消失了。但是,URL2 没有收到请求。有什么想法可以去哪里看?
    • 用你的路由文件、日志等更新问题。另外,尝试增加开发模式下可用的线程数。更好的是,创建一个新问题,让人们更容易导航到这些单独的问题。
    • 这是问题所在:因为它是一个新 URL,我没有原始会话中的 cookie,所以应用程序失败。绕过它的工作原理。
    • 尝试通过从传入请求中获取主机和端口来形成 URL。
    • 谢谢。我在传入的请求标头中看到 Referer,http://localhost:9000/) 并且我已经将 URL 格式化为 http://localhost:9000/url2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多