代码之家  ›  专栏  ›  技术社区  ›  Snake

使用okhttp对整数值执行post请求

  •  0
  • Snake  · 技术社区  · 7 年前

    我正在尝试用body向服务器发送POST请求。 某些正文值应为整数,而不是字符串。

    我将多部分生成器与okhttp一起使用,但它只接受名称-值对中的字符串值

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

    谢谢你

    0 回复  |  直到 7 年前
        1
  •  0
  •   Jeff Lockhart    7 年前

    格式为 multipart/form-data 值是未加引号的原始字符串。所以整数和字符串没有区别,就像JSON一样。请求中的每个字段 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数据规范的更多信息 RFC 7578 .

    更新:

    你要把一个请求发布到 this API ,您应该可以通过 application/x-www-form-urlencoded 表单参数而不是 多部分/表单数据 . 多部分/表单数据 更适合于发布二进制数据或上载文件的请求。

    在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
    }
    
    推荐文章