Multipart/form-data形式的post与普通post请求的不一样之处体如今请求头,请求体2个部分。html
必须包含Content-Type信息,且其值也必须规定为multipart/form-data,同时还须要规定一个内容分割符用于分割请求体中不一样参数的内容(普通post请求的参数分割符默认为&,参数与参数值的分隔符为=)。具体的头信息格式以下:java
Content-Type: multipart/form-data; boundary=${bound}
它也是一个字符串,不过和普通post请求体不一样的是它的构造方式。普通post请求体是简单的键值对链接,格式以下:post
k1=v1&k2=v2&k3=v3
multipart/form-data的格式以下:ui
--${bound} Content-Disposition: form-data; name="k1" //第一个参数,至关于k1;而后回车;而后是参数的值,即v1 HTTP.pdf //参数值v1 --${bound}
其中Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。spa
下面是mime相关的API构成代理
我只是使用mime的结构来构造请求参数,不须要发送邮件,因此并无用到MimeMessage。code
//构建MimeMultipart MimeMultipart mimeMultipart = new MimeMultipart(); //构建MimeBodyPart请求头 InternetHeaders header1 = new InternetHeaders(); header1.setHeader("Content-Type", "multipart/form-data"); header1.setHeader("Content-Disposition", "form-data; name=\"name\""); //MimeMultiPart添加MimeBodyPart mimeMultipart.addBodyPart(new MimeBodyPart(header1, "Jack".getBytes())); //建立entity ByteArrayOutputStream bout = new ByteArrayOutputStream(); mimeMultipart.writeTo(bout); RequestEntity entity = new ByteArrayRequestEntity(bout.toByteArray()); HttpClient httpClient = new HttpClient(); PostMethod postMethod = new PostMethod(uri); postMethod.setRequestEntity(entity); //设置Content-type为multipart/form-data postMethod.addRequestHeader("Content-Type", "multipart/form-data"); httpClient.executeMethod(postMethod);
打印上面的请求参数MimeMultipartorm
------=_Part_0_708049632.1604484390512 Content-Type: multipart/form-data Content-Disposition: form-data; name=“name” Jack ------=_Part_0_708049632.1604484390512 Content-Type: multipart/form-data Content-Disposition: form-data; name="age" 20
能够看到这是一个复合参数,最外层的Content-type是multipart/form-data,其中每一个MimeBodyPart的Content-Type是form-data.其中------=_Part_0_708049632.1604484390512是每一个参数的分界线boundary。htm
https://www.cnblogs.com/xdp-g...
https://www.codota.com/code/j...
https://www.cnblogs.com/zhjh2...
https://www.cnblogs.com/wangh...blog