无法使用Volley

时间:2017-07-28 14:57:12

标签: android http-post android-volley kotlin

我在身体请求中发送Params有问题。在Postman上我有成功的请求但是使用Volley我只得到意外的响应代码415 错误代码。

Postman successful request

Volley request

2 个答案:

答案 0 :(得分:0)

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

使用服务器将用于拆分参数的随机边界

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

getBodyContentType函数应返回MULTIPART_FORMDATA

override fun getBodyContentType(): String {
    return MULTIPART_FORMDATA
}

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

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

答案 1 :(得分:0)

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