【问题标题】:Post request dispatch/scala, getting http error 415发布请求调度/scala,收到 http 错误 415
【发布时间】:2015-06-17 09:58:55
【问题描述】:

我是 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
 }

我尝试了不同的语法,使用“

有什么想法吗?谢谢

编辑

我尝试删除 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 错误...

【问题讨论】:

  • 您是要在查询字符串中还是在帖子正文中发送这些参数?还有为什么在不发送 json 时将内容类型设置为 application/json。
  • 我正在尝试将它们发送到帖子正文。我虽然这是必要的,因为我正在接收 json,但可能不是。
  • 不设置内容类型试一试。该标头告诉接收服务器正文中的数据类型。如果它与实际存在的不匹配,则可能会导致问题。
  • @Charrette 你试过没有内容类型吗?
  • 我编辑了我的帖子,仍然无法再次处理 415 http 错误

标签: scala http


【解决方案1】:

试试下面的代码:

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)

【讨论】:

  • 我认为这是可行的,但我想以调度的方式进行,我必须使用它
猜你喜欢
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多