http请求中常用的三种Content-Type

一、application/jsonapplication/json是最长用Content-Type,大部分接口用的都是它,请求体是一个json字符串如下图所示:
FormBody body = FormBody.builder() .field("a", "qweasd") .field("b", 12423) .field("c", "hello") .build() Request request = Request.builder() .method("POST") .url('http://httpbin.org/post') .timeout(7000) .retryCount(0) .header("Content-Type", "application/x-www-form-urlencoded") .body(body) .build() def(Boolean error, HttpResult result, String message) = http.execute(request) if (error) { log.info("error :" + message) } else { log.info(result) }
三、multipart/form-dataapplication/x-www-form-urlencoded可以应付大部分表单提交,但如果有文件上传的话就不适用了,这个时候可以用multipart/form-datamultipart/form-data也通常用于文件上传,形式如下:multipart/form-data的参数拼接有些麻烦,header中除了有Content-Type外,还得有个boundary分隔符,默认由浏览器生成,在函数中可以用UUID代替,在拼接参数的时候会用上它在拼接参数的时候,将每个字段用“--分隔符”分隔,最后一个“--分隔符--”表示结束。例如,要上传一个title字段"Today"和一个文件C:\1.txt,HTTP正文如下:
InputStream inputStream = file.downloadStream("N_202111_29_6eb71dca766944c582b87e6a5213f3a3.docx")[1]['inputStream'] as InputStream MultipartBody multi = MultipartBody.builder() .addPart("name", "tom") .addPart("id", "1234") .addPart("file", inputStream, '测试附件.docx', 'application/octet-stream') .build(); Request request = Request.builder() .method("POST") .url('http://httpbin.org/post') .timeout(7000) .retryCount(0) .header("Content-Type", "multipart/form-data") .body(multi) .build() def(Boolean error, HttpResult result, String message) = http.execute(request) if (error) { log.info("error :" + message) } else { log.info(result) }
2023-02-10
0 0