Akka HTTP如何使用Content-Type应用程序/ x-www-form-urlencoded来发布singleRequest

Ale*_*ein 2 scala akka akka-http

我坚持使用Akka HTTP发送请求singleRequest()。我正在尝试处理Stripe API,它需要application/x-www-form-urlencoded传入请求的内容类型。

我尝试使用HTTP请求的以下结构:

val authorization = Authorization(OAuth2BearerToken("some_token"))

Http().singleRequest(HttpRequest(
        uri = Uri("https://api.stripe.com/v1/customers"),
        method = HttpMethods.POST,
        headers = List(authorization),
        entity = FormData(Map("email" -> HttpEntity("test_1@email.com"))).toEntity(),
        protocol = HttpProtocols.`HTTP/1.1`)
      )
Run Code Online (Sandbox Code Playgroud)

但是在Stripe日志中,我在“解析的请求POST正文”部分中看到以下内容:

(多部分形式:162)

那么问题是如何将内容类型设置为application/x-www-form-urlencoded

Ale*_*ein 5

问题与FormData类型有关。为了执行application/x-www-form-urlencoded请求,您需要使用FromDataakka.http.scaladsl.model

所以这是工作示例:

Http().singleRequest(HttpRequest(
        uri = Uri("https://api.stripe.com/v1/customers"),
        method = HttpMethods.POST,
        headers = List(authorization),
        entity = akka.http.scaladsl.model.FormData(Map("email" -> "user@email.com")).toEntity(HttpCharsets.`UTF-8`),
        protocol = HttpProtocols.`HTTP/1.1`)
      )
Run Code Online (Sandbox Code Playgroud)