一、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)
}