zoukankan      html  css  js  c++  java
  • 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表单直接提交数据都会以此种方式进行,多用来进行上传文件。
    如:
    在这里插入图片描述
    首先会生成一个 boundary 来分割各个字段, Content-Type 里指明用 mutipart/form-data 进行编码。消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 –boundary 开始,紧接着内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 –boundary– 标示结束。

    注:使用 HTTP Client 模拟此种类型请求时,header 会自动生成,不能手动设置,不然会获取不到数据。
    代码演示:

            HttpResponse response;
            HttpClient client = HttpClients.createDefault();
    
            MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
    
    //        entityBuilder.addBinaryBody("img",file, ContentType.MULTIPART_FORM_DATA,fileName);
            entityBuilder.addTextBody("userTel", userTel);
            entityBuilder.addTextBody("distinctId", distinctId);
            entityBuilder.addTextBody("buildingId", buildingId);
            entityBuilder.addTextBody("roomId", roomId);
            entityBuilder.addTextBody("equipmentId", equipmentId);
            entityBuilder.addTextBody("listDescription", listDescription);
    
            HttpEntity entity = entityBuilder.build();
    
    
            HttpPost post = new HttpPost(url);
            post.setEntity(entity);
    
            try {
                response = client.execute(post);
                Document doc = Jsoup.parse(EntityUtils.toString(response.getEntity()).replace(" ", ""));
                System.out.println(response);
                System.out.println(doc.text());
    
            } catch (IOException e) {
                e.printStackTrace();
            }
    

    没有修不好的电脑
  • 相关阅读:
    MongoDB:数据库管理
    MongoDB:用户管理
    MongoDB:入门
    彻底透析SpringBoot jar可执行原理
    轻松了解Spring中的控制反转和依赖注入(一)
    领域驱动最佳实践--用代码来告诉你来如何进行领域驱动设计
    血的教训--如何正确使用线程池submit和execute方法
    领域驱动设计之实战权限系统微服务
    为什么我们需要领域驱动设计
    【Go入门学习】golang自定义路由控制实现(二)-流式注册接口以及支持RESTFUL
  • 原文地址:https://www.cnblogs.com/duniqb/p/12702426.html
Copyright © 2011-2022 走看看