使用Scala在HttpsRequest中设置Json请求的contentType

问题描述 投票:0回答:1

尝试发送httpRequest到远程服务器,但服务器似乎没有收到它,像这样的curl命令工作正常:

curl -X POST -H "Content-Type: application/json"  -d @payload.json -u "user:password" url

但是如果我们从 scala 程序尝试,端点似乎没有收到请求。最有可能的服务器在标头中查找 ContentType.application/json ! 示例代码:

val body = "[{\"Field1\":\"XYZ\",\"Field2\":1,\"ID:\"test\"}]"
 
authorization = Some(headers.Authorization(BasicHttpCredentials(username, password)))
val request = HttpRequest(
method = HttpMethods.POST,
uri = url,
headers = authorization.toList,
entity = HttpEntity(
ContentTypes.`application/json`,
s"source=$body&language=Scala&theme==Sunburst"
)
)

val responseFuture: Future[HttpResponse] = Http().singleRequest(request)
responseFuture
.onComplete {
case Success(res) => println(res.toString())
case Failure(_) => sys.error("something wrong" + responseFuture.toString)
}

这会返回http代码= 200,好的,这很好,但是没有像我们通过curl命令得到的那样得到响应!

scala akka-http
1个回答
0
投票

很难明确回答,因为您调用的服务器似乎没有提供有用的错误消息或 HTTP 代码。

您发送的正文不是 JSON,声称它是。

将您的

entity
更改为:

entity = HttpEntity(
  ContentTypes.`application/json`,
  body
)

不确定,

source=..&language=...
应该是什么?如果这些是查询参数,请将它们添加到
uri
中(可以选择使用
Uri
类来更好地描述事物)。


请注意,您可以使用

body
语法更轻松地编写
"""

val body = """
[
  {"Field1":"XYZ","Field2":1,"ID:"test"}
]
"""
© www.soinside.com 2019 - 2024. All rights reserved.