Scala测试Web服务客户端的POST请求

时间:2017-09-13 19:10:05

标签: scala playframework

因此,您可以找到的here的Play文档为GET调用提供了一个非常简单的示例,没有像auth标头或参数那样的内容。

有人可以帮我弄清楚如何使用类似的策略来处理更复杂的事情,例如需要使用JSON数据的POST请求作为body和auth标头吗?我现在无法让它工作。

我想知道如何使用ws测试客户端来执行外部http请求。

由于

1 个答案:

答案 0 :(得分:0)

以下是我的一个项目代码片段,它通过twilio api发送短信:

class SmsServiceImpl @Inject()(config: Configuration, ws: WSClient) extends SmsService {

  val twilloAccountSid = config.getString("twillo.accountSid").get
  val twilloAuthToken = config.getString("twillo.authToken").get
  val smsApiUrl = config.getString("twillo.apiBaseUrl").get + "/" +twilloAccountSid+"/Messages.json"

  override def send(phone: String, message: String): Future[Unit] = {
    val data = Map(
      "To" -> Seq(phone),
      "From" ->  Seq(config.getString("twillo.fromPhone").get),
      "Body" -> Seq(message)
    )
    val response: Future[WSResponse] = ws.url(smsApiUrl).withAuth(twilloAccountSid, twilloAuthToken, WSAuthScheme.BASIC).post(data)
    response.map { response =>
      response.status match {
        case 201 => Unit
        case _ => throw new SmsSendingException(s"Failed to send sms. Got https status: ${response.status}")
      }
    }
  }

这是带有身份验证的POST请求。