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