【问题标题】:Can't send multpart/form-data with Volley无法使用 Volley 发送多部分/表单数据
【发布时间】:2018-01-04 17:00:57
【问题描述】:

我在正文请求中发送参数时遇到问题。在 Postman 上我有成功的请求,但使用 Volley 我只得到 Unexpected response code 415 错误代码。

【问题讨论】:

  • 该解决方案对您有用吗?

标签: android http-post android-volley kotlin


【解决方案1】:

Postman 在发送请求时会自动生成一些随机边界文本,这些文本会添加到正文参数中。您的代码中缺少这一点。您可以这样做:

使用服务器将用来分割参数的随机边界

val BOUNDARY = "AS24adije32MDJHEM9oMaGnKUXtfHq"
val MULTIPART_FORMDATA = "multipart/form-data;boundary=" + BOUNDARY

getBodyContentType 函数应该返回那个 MULTIPART_FORMDATA

override fun getBodyContentType(): String {
    return MULTIPART_FORMDATA
}

在 getBody() 函数中,将边界添加到参数中,如下所示:

override fun getBody(): ByteArray {
    val params = HashMap<String, String>()
    params.put("profile_id", "1")
    params.put("place_name", "La la land")
    params.put("place_identifier", "10239jodmda")

    val map: List<String> = params.map {
        (key, value) -> "--$BOUNDARY\nContent-Disposition: form-data; name=\"$key\"\n\n$value\n"
    }
    val endResult = "${map.joinToString("")}\n--$BOUNDARY--\n"
    return endResult.toByteArray()
}

由于您已经在 getBodyContentType() 上设置了内容类型,您可能不需要在 getHeaders() 上需要以下行:

headers.put("Content-Type", "multipart/form-data")

这个 SO 答案展示了如何在 java 中做类似的事情:https://stackoverflow.com/a/38238994/3189164

【讨论】:

    【解决方案2】:

    对我有用的解决方案是 remove 从标题中设置 Content-Type 的行!

    【讨论】:

      猜你喜欢
      • 2020-04-11
      • 2020-06-18
      • 2015-02-14
      • 2019-08-01
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      相关资源
      最近更新 更多