发布请求调度/ scala,获取http错误415

时间:2015-06-17 09:58:55

标签: scala http

我是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错误......

1 个答案:

答案 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)