【发布时间】:2018-01-04 17:00:57
【问题描述】:
【问题讨论】:
-
该解决方案对您有用吗?
标签: android http-post android-volley kotlin
【问题讨论】:
标签: android http-post android-volley kotlin
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
【讨论】:
对我有用的解决方案是 remove 从标题中设置 Content-Type 的行!
【讨论】: