我是Scala和Dispatch的新手,我正在尝试发送POST请求,从昨天起我就无法找到为什么这不起作用。
首先,我为一个运行良好的GET请求创建了一个方法,这里是代码:
def request(URL: String): String = {
val service = url(URL).GET
var ret = "{\"error\":0}"
val result = Http(service).either.map {
case Left(error) => {
}
case Right(response) => {
if (response.getStatusCode == 200)
ret = response.getResponseBody
else
ret = "{\"error\":" + response.getStatusCode + "}"
}
}
Await.result(result, 10 seconds)
ret
}
现在我正在尝试对POST请求执行相同的操作,如下所示:
def request(URL: String): String = {
val service = url(URL).POST.setContentType("application/json", "UTF-8").addParameter("login", "root").addParameter("password", "root")
var ret = "{\"error\":0}"
val result = Http(service).either.map {
case Left(error) => {
}
case Right(response) => {
if (response.getStatusCode == 200)
ret = response.getResponseBody
else
ret = "{\"error\":" + response.getStatusCode + "}"
}
}
Await.result(result, 10 seconds)
ret
}
我尝试了不同的语法,“<< \?”等......我发现这个更具可读性。 无论如何,无论我选择何种语法,结果都是一样的,这里我得到415 HTTP错误。但是当我向邮递员发送完全相同的请求时,它正在工作,我无法弄清楚为什么......
有什么想法吗?感谢
修改
我尝试删除setContentType并替换
val service = url(URL).POST.setContentType("application/json", "UTF-8").addParameter("login", "root").addParameter("password", "root")
通过
val service = url(URL).POST.addParameter("login", "root").addParameter("password", "root")
但这仍然无效。
编辑2
我需要将Content-Type设置为multipart / form-data,我做了类似的事情:
val service = url(URL).POST.setHeader("Content-Type", "multipart/form-data;charset=utf-8").addParameter("login", "root").addParameter("password", "root")
这是消费的格式,但现在我得到的是400 HTTP错误......
答案 0 :(得分:0)
请尝试使用以下代码:
val client = new DefaultHttpClient()
URL.setHeader("Content-type", "application/json")
URL.setHeader("Accept", "application/json")
val obj = new JSONObject()
obj.put("login", "root")
obj.put("password", "root")
URL.setEntity(new StringEntity(obj.toString, "UTF-8"))
val response = client.execute(URL)