尝试发送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命令得到的那样得到响应!
很难明确回答,因为您调用的服务器似乎没有提供有用的错误消息或 HTTP 代码。
您发送的正文不是 JSON,声称它是。
将您的
entity
更改为:
entity = HttpEntity(
ContentTypes.`application/json`,
body
)
不确定,
source=..&language=...
应该是什么?如果这些是查询参数,请将它们添加到 uri
中(可以选择使用 Uri
类来更好地描述事物)。
请注意,您可以使用
body
语法更轻松地编写 """
:
val body = """
[
{"Field1":"XYZ","Field2":1,"ID:"test"}
]
"""