HttpClient 发送表单

这篇具有很好参考价值的文章主要介绍了HttpClient 发送表单。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基础代码

只包含最简单的代码,不包含乱码解决、文件上传

import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class Test {

    public static void main(String[] args) {
        CloseableHttpClient client = HttpClients.createDefault();
        try{
            //创建 post 请求(fiddler 设置了监听 8888 端口)
            HttpPost post = new HttpPost("http://127.0.0.1:8888");
            RequestConfig defaultRequestConfig = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(5000).setSocketTimeout(15000).build();
            post.setConfig(defaultRequestConfig);
            //创建表单
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            builder.addTextBody("key1","值1", ContentType.create("multipart/form-data",Consts.UTF_8));
            builder.addTextBody("key2","值2", ContentType.create("multipart/form-data",Consts.UTF_8));
            HttpEntity build = builder.build();
            post.setEntity(build);
            //发送请求
            CloseableHttpResponse response = client.execute(post);
            System.out.println(response.getEntity());
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                //关闭连接
                client.close();
            }catch (Exception e){}
        }
    }

}

HttpClient 发送表单

可以看到没有乱码,并且都已经赋值,但是此时我们将 key 改成中文,就会变成乱码

HttpClient 发送表单

即使上方已经将 Content-type 改成 UTF-8,但依旧乱码,因为此时只是设置了内容的值为 UTF-8,需要设置字段值也改成 UTF-8

解决中文乱码

方法一

设置字段模式为 HttpMultipartMode.RFC6532

builder.setMode(HttpMultipartMode.RFC6532);
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class Test {

    public static void main(String[] args) {
        CloseableHttpClient client = HttpClients.createDefault();
        try{
            //创建 post 请求
            HttpPost post = new HttpPost("http://127.0.0.1:8888");
            RequestConfig defaultRequestConfig = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(5000).setSocketTimeout(15000).build();
            post.setConfig(defaultRequestConfig);
            //创建表单
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            //设置模式,在 下方 build 方法中,会调用 new HttpRFC6532Multipart() 方法,其中字段默认编码就为 UTF-8 (一种取巧的方法)
            builder.setMode(HttpMultipartMode.RFC6532);
            builder.addTextBody("字段1","值1", ContentType.create("multipart/form-data",Consts.UTF_8));
            builder.addTextBody("字段2","值2", ContentType.create("multipart/form-data",Consts.UTF_8));
            HttpEntity build = builder.build();
            post.setEntity(build);
            //发送请求
            CloseableHttpResponse response = client.execute(post);
            System.out.println(response.getEntity());
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                //关闭连接
                client.close();
            }catch (Exception e){}
        }
    }

}

HttpClient 发送表单

方法二

设置字段模式为 HttpMultipartMode.BROWSER_COMPATIBLE,同时设置编码为 UTF-8

builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.setCharset(Consts.UTF_8);
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class Test {

    public static void main(String[] args) {
        CloseableHttpClient client = HttpClients.createDefault();
        try{
            //创建 post 请求
            HttpPost post = new HttpPost("http://127.0.0.1:8888");
            RequestConfig defaultRequestConfig = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(5000).setSocketTimeout(15000).build();
            post.setConfig(defaultRequestConfig);
            //创建表单
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            //设置为浏览器模式,其中字段会根据 builder.charset 来设置编码格式
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            builder.setCharset(Consts.UTF_8);
            builder.addTextBody("字段1","值1", ContentType.create("multipart/form-data",Consts.UTF_8));
            builder.addTextBody("字段2","值2", ContentType.create("multipart/form-data",Consts.UTF_8));
            HttpEntity build = builder.build();
            post.setEntity(build);
            //发送请求
            CloseableHttpResponse response = client.execute(post);
            System.out.println(response.getEntity());
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                //关闭连接
                client.close();
            }catch (Exception e){}
        }
    }

}

HttpClient 发送表单

文件上传

一般 form 表单都会提供文件上传,直接添加 addBinaryBody 即可,其中该提供 inputSteam、文件重命名等方法,具体可自行研究

builder.addBinaryBody("文件字段3",new File("D:\\test\\部署路径.xlsx"));

HttpClient 发送表单

发送form表单完整代码

import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import java.io.File;

public class Test {

    public static void main(String[] args) {
        CloseableHttpClient client = HttpClients.createDefault();
        try{
            //创建 post 请求
            HttpPost post = new HttpPost("http://127.0.0.1:8888");
            RequestConfig defaultRequestConfig = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(5000).setSocketTimeout(15000).build();
            post.setConfig(defaultRequestConfig);
            //创建表单
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            //(防止字段名中文乱码)设置为浏览器模式,其中字段会根据 builder.charset 来设置编码格式
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            builder.setCharset(Consts.UTF_8);
            //设置普通字段值
            builder.addTextBody("字段1","值1", ContentType.create("multipart/form-data",Consts.UTF_8));
            builder.addTextBody("字段2","值2", ContentType.create("multipart/form-data",Consts.UTF_8));
            //添加文件
            builder.addBinaryBody("文件字段3",new File("D:\\test\\部署路径.xlsx"));
            HttpEntity build = builder.build();
            post.setEntity(build);
            //发送请求
            CloseableHttpResponse response = client.execute(post);
            System.out.println(response.getEntity());
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                //关闭连接
                client.close();
            }catch (Exception e){}
        }
    }

}

附带发送 body 请求代码

import com.alibaba.fastjson.JSONObject;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import java.util.HashMap;

public class Test {

    public static void main(String[] args) {
        CloseableHttpClient client = HttpClients.createDefault();
        try{
            //创建 post 请求
            HttpPost post = new HttpPost("http://127.0.0.1:8888");
            RequestConfig defaultRequestConfig = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(5000).setSocketTimeout(15000).build();
            post.setConfig(defaultRequestConfig);

            //设置 body 值
            HashMap<String, Object> map = new HashMap<>();
            map.put("字段1","值1");
            String jsonString = JSONObject.toJSONString(map);

            post.setEntity(new StringEntity(jsonString, ContentType.APPLICATION_JSON));

            //发送请求
            CloseableHttpResponse response = client.execute(post);
            System.out.println(response.getEntity());
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                //关闭连接
                client.close();
            }catch (Exception e){}
        }
    }

}

HttpClient 发送表单文章来源地址https://www.toymoban.com/news/detail-719329.html

到了这里,关于HttpClient 发送表单的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#中通过HttpClient发送Post请求

    C#中HttpClient进行各种类型的传输 我们可以看到, 尽管PostAsync有四个重载函数, 但是接受的都是HttpContent, 而查看源码可以看到, HttpContent是一个抽象类 那我们就不可能直接创建HttpContent的实例, 而需要去找他的实现类, 经过一番研究, 发现了, 如下四个: MultipartFormDataContent、FormUrl

    2024年02月02日
    浏览(38)
  • Android发送短信最简单代码实现

    实现效果如下:(为了尽量使用最少的代码实现功能,界面十分简单,方便理解原理) 这边我输入短信内容为\\\"252525\\\"                                                                                           图一  输入发送号码和指定内容                    

    2024年02月04日
    浏览(32)
  • RISC-V基础之函数调用(一)简单的函数调用(包含实例)

    高级语言支持函数(也称为过程或子程序)来重用通用的代码,以及使程序更加模块化和可读。函数可以有输入,称为参数,和输出,称为返回值。函数应该计算返回值,并且不产生其他意外的副作用。 在一个函数调用另一个函数时,调用者(caller)和被调用者(callee)必须

    2024年02月14日
    浏览(36)
  • 一个简单的使用支持向量机(SVM)进行回归预测的Python代码示例,包含了源数据和注释

    使用了scikit-learn库中的SVR类来实现支持向量机回归模型。首先,我们导入了所需的库,包括numpy用于处理数据,train_test_split用于划分训练集和测试集,SVR用于构建SVM回归模型,以及mean_squared_error和r2_score用于评估模型性能。 接着,我们定义了源数据,包括特征矩阵X和目标向量

    2024年02月11日
    浏览(34)
  • 【Java-Crawler】HttpClient+Jsoup实现简单爬虫

    网络爬虫(WEB crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。 导入依赖(下面列的程序用的是这个依赖,是版本5,我是从Maven中直接copy最新版的,没想那么多,但4点多的用的人多点,而且网上资料也多点,所以还是推荐大家用4点多的吧,但是下

    2024年02月05日
    浏览(29)
  • React-hook-form-mui(五):包含内嵌表单元素的表单

    在上一篇文章中,我们介绍了 react-hook-form-mui 如何与与后端数据联调。在实际项目中,从后端获取的数据可能是复杂的数据对象,本文将介绍,如何通过 react-hook-form-mui 实现一个包含内嵌表单元素的表单 以下代码实现了一个包含内嵌表单元素的表单的完整代码: 以上代码是

    2024年02月03日
    浏览(27)
  • webIDE表单标签以及包含选择器的使用

    IDE的使用 表单标签 css层叠样式表(cascading style sheet) 外链样式的好处 首先提高代码的复用性 他可以降低代码的耦合性 基本选择器 包含选择器

    2024年01月23日
    浏览(29)
  • JS获取表单保存的时候发送到server端的xml

    var dataXml = Xrm.Page.data.entity.getDataXml(); alert(dataXml); JS获取表单保存的时候发送到server端的xml。

    2024年02月13日
    浏览(67)
  • 详解织梦dedecms自定义表单提交之后发送到邮箱的方法

    1、修改程序代码,打开 /plus/diy.php 文件 找到(约85行) 在其下边添加如下代码: 注:$name $email $message 三个变量都是提交的字段,在您提交的字段名称前面加$符号就行,这个根据你的需要修改。然后保存。 2、网站后台添加发布邮箱的参数: 后台--系统--系统基本参数--核心

    2024年02月02日
    浏览(25)
  • 0基础→自动化测试框架实现:java + testng + httpclient + allure

    必备基础 java基础:https://www.cnblogs.com/uncleyong/p/15828510.html 配置文件解析(properties):https://www.cnblogs.com/uncleyong/p/15867779.html fastjson的使用(处理json字符串、json数组):https://www.cnblogs.com/uncleyong/p/16683578.html jsonpath的使用:https://www.cnblogs.com/uncleyong/p/16676791.html java操作excel(通过POI):

    2024年02月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包