使用okhttp进行带整数值的发布请求

问题描述 投票:0回答:1

我正在尝试向带有正文的服务器发送POST请求。预期某些正文值为整数,而不是字符串。

我正在使用带有okhttp的multipart构建器,但它只接受名称 - 值对中的字符串值

如何将整数值作为整数发送(无引号)

谢谢

android okhttp3
1个回答
0
投票

multipart/form-data值的格式是原始未加引号的字符串。因此,整数和字符串之间没有区别,因为存在像JSON这样的格式。使用Content-Type multipart/form-data的请求中的每个字段也可以定义自己的Content-Type。字段可以是带有JSON文本值的application/json,带有HTML文本值的text/html,甚至是包含原始二进制数据的application/octet

原始请求的格式如下:

POST /example.com HTTP/1.1
<additional headers>
Content-Type: multipart/form-data; boundary=vzgD3VXVRH
Content-Length: 1250

--vzgD3VXVRH
Content-Disposition: form-data; name="string"

text value
--vzgD3VXVRH
Content-Disposition: form-data; name="number"

12345
--vzgD3VXVRH
Content-Disposition: form-data; name="json"; filename="example.json"
Content-Type: application/json

{"string":"text value","number":12345}
--vzgD3VXVRH
Content-Disposition: form-data; name="text"; filename="example.txt"
Content-Type: text/plain

The quick brown fox jumps over the lazy dog
--vzgD3VXVRH
Content-Disposition: form-data; name="html"; filename="example.html"
Content-Type: text/html

<!DOCTYPE html>
<html>
<head><title>Page Title</title></head>
<body><h1>Simple HTML doc</h1></body>
</html>
--vzgD3VXVRH
Content-Disposition: form-data; name="binary"; filename="example.bin"
Content-Type: application/octet-stream

<raw binary data>
--vzgD3VXVRH--

有关multipart / form-data规范RFC 7578的更多信息。

更新:

在澄清您要向this API发布请求时,您应该能够使用application/x-www-form-urlencoded表单参数而不是multipart/form-data发布请求。 multipart/form-data更适合发布二进制数据或上传文件的请求。

您可以在OkHttp中执行以下操作:

OkHttpClient client = new OkHttpClient();
String userId = "12345";

RequestBody formBody = new FormBody.Builder()
        .add("mealTypeId", "7")
        .add("unitId", "321")
        .add("amount", "4.25")
        .add("date", "2019-03-18")
        .build();
Request request = new Request.Builder()
        .url("https://api.fitbit.com/1/user/" + userId + "/foods/log.json")
        .post(formBody)
        .build();

try {
    Response response = client.newCall(request).execute();

} catch (IOException e) {
    // handle error
}
© www.soinside.com 2019 - 2024. All rights reserved.