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

HttpClient form data请求总结_第1张图片

首先会生成一个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格式。

你可能感兴趣的:(接口自动化测试)