Формат для значений multipart/form-data
является необработанной строкой без кавычек. Таким образом, нет разницы между целым числом и строкой, как в формате, подобном JSON. Каждое поле в запросе с Content-Type
multipart/form-data
может также иметь свое собственное значение Content-Type
. Поле может быть application/json
с текстовым значением JSON, text/html
с текстовым значением 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 .
Обновление:
С учетом того, что вы отправляете запрос в этого 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
}