HttpClient form data请求总结
http请求发送之后,服务端需要对请求数据进行解析,但是服务端并不知道请求给我的数据是什么,所以需要规定我按照什么规则进行解析,一般服务器都根据Content-Type字段来明确请求数据是如何编码的,然后对其进行解析。Content-Type常见的编码方式有:application/x-www-form-urlencoded,application/json,multipart/form-data,text/xml。
1、application/x-www-form-urlencoded
这是最常见的post请求的提交数据的方式,参数会按照key1=XXX&key2=XXX的方式进行提交。
2、application/json
现在这种方式越来越普遍,请求数据会按照json字符串的形式传送给服务器,此种方式适合处理复杂的数据,如
3、multipart/form-data
一般form表单直接提交数据都会以此种方式进行,多用来进行上传文件。
content-type:multipart/form-data; boundary=----WebKitFormBoundarySQ7n2X3p1oRlt9hj
如
首先会生成一个boundary来分割各个字段, Content-Type 里指明用 mutipart/form-data 进行编码。消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 –boundary 开始,紧接着内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 –boundary– 标示结束。
注:使用HTTP Client模拟此种类型请求时,header会自动生成,不能手动设置,不然会获取不到数据。
如:
MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.addBinaryBody("img",file, ContentType.MULTIPART_FORM_DATA,fileName); builder.addTextBody("maxsize","5120"); HttpEntity entity = builder.build(); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(entity); HttpResponse httpResponse = null; try{ httpResponse = client.execute(httpPost); }catch(IOException e){ e.printStackTrace(); }
4、text/xml
xml作为编码方式,方式简单,支持种类较多。但一般使用起来比较臃肿,更多会使用json格式。