首页 > 编程语言 >java发送http请求

java发送http请求

时间:2024-07-19 16:55:42浏览次数:16  
标签:java http hc 发送 import apache org null

pom

<dependency>
  <groupId>org.apache.httpcomponents.client5</groupId>
  <artifactId>httpclient5</artifactId>
  <version>5.1.3</version>
</dependency>

package com.xcg.webapp.Common;

import org.apache.commons.lang3.StringUtils;
import org.apache.hc.client5.http.ClientProtocolException;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.entity.UrlEncodedFormEntity;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.ContentType;
import org.apache.hc.core5.http.HttpStatus;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.io.entity.StringEntity;
import org.apache.hc.core5.http.message.BasicNameValuePair;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.zip.GZIPOutputStream;

/**
 * https://blog.csdn.net/HIGK_365/article/details/136985075
 */
public final class HttpRestUtil {
    //设置字符编码
    private static final String CHARSET_UTF8 = "UTF-8";

    /**
     * 发送HTTP POST请求,参数为JSON格式。
     * 此方法用于将JSON格式的字符串作为请求体发送到指定的URL,并接收响应。
     *
     * @param url        请求的URL地址。不能为空。
     * @param jsonData   请求的参数,应为符合JSON格式的字符串。
     * @param headParams 请求的头部参数,以键值对形式提供。可以为空,但如果非空,则添加到请求头中。
     * @return 服务器响应的字符串形式内容。如果请求失败,则可能返回null。
     * throws BusinessException 当发生不支持的编码、客户端协议错误或IO异常时抛出。
     */
    public static String post(String url, String jsonData, Map<String, String> headParams) throws Exception {
        String result = null;
        // 创建HTTP客户端实例
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;

        try {
            // 创建HTTP POST请求对象
            HttpPost httpPost = new HttpPost(url);
            // 配置请求和传输超时时间
            RequestConfig requestConfig = RequestConfig.custom()
                    .setConnectionRequestTimeout(100, TimeUnit.SECONDS)
                    .build();
            httpPost.setConfig(requestConfig);
            // 将JSON字符串参数转换为StringEntity,并设置请求实体
            httpPost.setEntity(new StringEntity(jsonData, ContentType.create("application/json", CHARSET_UTF8)));
            // 如果存在头部参数,则添加到请求头中
            if (headParams != null && !headParams.isEmpty()) {
                for (Map.Entry<String, String> entry : headParams.entrySet()) {
                    httpPost.addHeader(entry.getKey(), entry.getValue());
                }
            }
            // 执行请求并获取响应
            response = httpClient.execute(httpPost);
            // 检查响应状态码
            int statusCode = response.getCode();
            if (HttpStatus.SC_OK != statusCode) {
                httpPost.abort();
                throw new RuntimeException("HttpClient,error status code :" + statusCode);
            }
            // 从响应中获取内容并转换为字符串
            var entity = response.getEntity();
            if (null != entity) {
                result = EntityUtils.toString(entity, CHARSET_UTF8);
            }
            EntityUtils.consume(entity);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //释放资源
            release(response, httpClient);
        }
        return result;
    }

    /**
     * get请求
     * https://blog.csdn.net/Barry_Li1949/article/details/134641891
     */
    public static String get(String urlWithParams) throws Exception {
        return get(urlWithParams, null, null);
    }

    public static String get(String url, Map<String, String> params, Map<String, String> headParams) throws Exception {
        String result = null;
        // 创建HTTP客户端实例
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String paramStr = null;
        try {
            // 构建请求参数列表
            List<BasicNameValuePair> paramsList = new ArrayList<>();
            if (params != null) {
                for (Map.Entry<String, String> entry : params.entrySet()) {
                    paramsList.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
                }
                // 将参数列表转换为字符串形式,用于拼接到URL后
                paramStr = EntityUtils.toString(new UrlEncodedFormEntity(paramsList));
            }
            // 拼接参数到URL
            StringBuffer sb = new StringBuffer();
            sb.append(url);
            if (!StringUtils.isBlank(paramStr)) {
                sb.append("?");
                sb.append(paramStr);
            }
            // 创建HTTP GET请求对象
            HttpGet httpGet = new HttpGet(sb.toString());
            // 配置请求和传输超时时间
            RequestConfig requestConfig = RequestConfig.custom()
                    .setConnectionRequestTimeout(100, TimeUnit.SECONDS)
                    .build();
            httpGet.setConfig(requestConfig);
            // 如果存在头部参数,则添加到请求头中
            if (headParams != null && !headParams.isEmpty()) {
                for (Map.Entry<String, String> entry : headParams.entrySet()) {
                    httpGet.addHeader(entry.getKey(), entry.getValue());
                }
            }
            // 执行请求并获取响应
            response = httpClient.execute(httpGet);
            // 检查响应状态码
            int statusCode = response.getCode();
            if (HttpStatus.SC_OK != statusCode) {
                httpGet.abort();
                throw new RuntimeException("HttpClient,error status code :" + statusCode);
            }
            // 从响应中获取内容并转换为字符串
            var entity = response.getEntity();
            if (null != entity) {
                result = EntityUtils.toString(entity, CHARSET_UTF8);
            }
            EntityUtils.consume(entity);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //释放资源
            release(response, httpClient);
        }
        return result;
    }

    /**
     * 释放资源,httpResponse为响应流,httpClient为请求客户端
     */
    private static void release(CloseableHttpResponse httpResponse, CloseableHttpClient httpClient) throws IOException {
        if (httpResponse != null) {
            httpResponse.close();
        }
        if (httpClient != null) {
            httpClient.close();
        }
    }
}

 

标签:java,http,hc,发送,import,apache,org,null
From: https://www.cnblogs.com/xsj1989/p/18311790

相关文章

  • java比较mysql两个数据库中差异
    java对比两个库之间差异packagecom.ruoyi.shht;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;importjava.tex......
  • Java面向对象
    面向对象    要理解面向对象思想,就先要知道什么是对象?    对象,不只是“男女朋友”,在《Java编程思想》中多次提到“万物皆对象”的概念。它除了可以存储数据之外还可以对它自身进行操作。它能够直接反映现实生活中的事物,例如人、车、小鸟等一切事物,都可以表示......
  • PHP curl 模拟GET请求接口报错HTTP Status 400 – Bad Request 问题
    网上查的解决方案:https://blog.csdn.net/sunsijia21983/article/details/123204143问题:PHP用curl模拟GET请求接口报错HTTPStatus400–BadRequesthttp://xxx/api/getZList?page=1&limit=20&zName=测试参数zName是英文、数字的时候都不会报错,输入汉字就报错400;解决方案:h......
  • Java面试指南:突破面试难关,成为优秀程序员的必备利器!
    一、Java基础部分面试题1.Java面向对象的三个特征封装:对象只需要选择性的对外公开一些属性和行为。继承:子对象可以继承父对象的属性和行为,并且可以在其之上进行修改以适合更特殊的场景需求。多态:允许不同类的对象对同一消息做出响应。2.Java中基本的数据类型有哪些以及他......
  • JAVA基础知识
    注释单行注释//多行注释/**/文档注释(JavaDoc)/**标识符和关键字关键字标识符以字母、$、_开始区分大小写可以中文或拼音(不建议)数据类型强类型语言与弱类型语言Java:强类型变量需要先定义再使用(安全性高速度慢)基本数据类型与引用数据类型基......
  • java之gzip压缩、解压缩
    codepackagecom.xcg.webapp.Common;importorg.apache.commons.lang3.StringUtils;importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.nio.charset.StandardCharsets;importjava.util.Base64;i......
  • 服务启动报错: [ main] c.a.n.c.config.http.ServerHttpAgent : no available server
    场景:一个服务,注册中心使用nacos 服务启动时报错:2024-07-1913:11:17.466ERROR32188---[main]c.a.n.c.config.http.ServerHttpAgent:[NACOSSocketTimeoutExceptionhttpGet]currentServerAddr:http://localhost:8848,err:connecttimedout2024-07-1913:11:18.......
  • HTTPS请求笔记- SSL安全通道验证问题
    一直以来,遇到的POST接口请求都是键值对的json格式,最近对接了不少公安,发现body的请求体都是直接放置字符串,虽然postman中会报红,但是仍然可请求成功using(HttpClientHandlerhandle=newHttpClientHandler())using(HttpClienthttpClient=newH......
  • JavaScript手机号实名认证接口如何集成 验证手机号与持有人是否一致
    手机号实名认证接口是一种用于验证手机号码是否存在的实名登记服务,能够核验三大运营商(中国移动、中国电信、中国联通)手机号码的实名认证状态,通常被应用于网站、电商平台注册、支付平台注册等场景中,以便于核验用户身份的真伪,以此来保障用户身份信息与财产不受损失!随着市场......
  • 基于javaweb jsp ssm校园教务系统+vue录像(源码+lw+部署文档+讲解等)
    前言......