[java]封装 httpClient 工具类发送 post & delete & put 的 http 请求(带参数 + digest 认证)

本文档介绍了一个自定义的Java工具类,用于处理GET、POST(包括form-data提交)、PUT和DELETE请求。该工具类支持Digest认证,特别适用于需要与第三方接口交互的场景。通过HttpClient库实现,详细代码展示了如何处理不同类型的HTTP请求和错误处理。此外,还提及了Okhttpclient和Spring的RestTemplate作为替代方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说下背景:我最近负责的项目,需要调用第三方接口,发送 get/post/put/delete 请求,这些请求有的需要经过 digest 认证,有的则不需要进行 digest 认证,直接请求就可以了
get 请求还好说一些,直接使用 hutool 工具类中的 get 请求就可以满足需要,那你可能会说, hutool 工具类也支持 post 请求呀,但是如果我的 post 请求需要以 form-data 形式提交,它就不满足了,而且 hutool 工具类也不支持发送 put/delete 请求

所以我就自己写了个工具类,不过我写的这个比较粗糙,放在这里,有需要的人看着拿吧~回头我有时间的话,就再优化一下:

public class HttpUtils {
   
    /**
     * 以 post 方式调用第三方接口,以 form-data 形式  发送 MultipartFile 文件数据
     *
     * @param url  post请求url
     * @param fileParamName 文件参数名称
     * @param multipartFile  文件
     * @param paramMap 表单里其他参数
     * @return
     */
    public static String doPostFormData(String url, String fileParamName, MultipartFile multipartFile, Map<String, String> paramMap) {
   

        // 创建 Http 实例
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 创建 HttpPost 实例
        HttpPost httpPost = new HttpPost(url);

        // 请求参数配置
        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000)
                .setConnectionRequestTimeout(10000).build();
        httpPost.setConfig(requestConfig);

        try {
   
            MultipartEntityBuilder builder = MultipartEntityBuilder.create()
                    .setCharset(Consts.UTF_8);
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

            // 设置 content-type
            builder.setContentType(ContentType.MULTIPART_FORM_DATA);
            builder.setCharset(StandardCharsets.UTF_8);
            // 待上传文件
            FormBodyPart part = FormBodyPartBuilder.create()
                    .setName(fileParamName)
                    .setBody(new ByteArrayBody(
                            multipartFile.getBytes(),
                            ContentType.create(multipartFile.getContentType(), StandardCharsets.UTF_8),
                            multipartFile.getOriginalFilename()))
                    .build();
            builder.addPart(part);

            // 表单中其他参数
            if(paramMap != null) {
   
                for (Map.Entry<String, String> entry : paramMap.entrySet()) {
   
                    builder.addPart(FormBodyPartBuilder.create()
                            .setName(entry.getKey())
                            .setBody(new StringBody(entry.getValue(),
                                    ContentType.create(
                                            ContentType.TEXT_PLAIN.getMimeType(),
                                            StandardCharsets.UTF_8)))
                            .build());
                }
            }

            HttpEntity entity = builder.build();
            httpPost.setEntity(entity);
            // 执行提交
            HttpResponse response = httpClient.execute(httpPost);

            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
   
                // 返回
                String res = EntityUtils.toString(response.getEntity(), java.nio.charset.Charset.forName("UTF-8"));
                return res;
            }else {
   
                HttpEntity responseEntity = response.getEntity();
                byte[] msg = new byte[(int) responseEntity.getContentLength()];
                responseEntity.getContent()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值