首页 > 其他分享 >HttpUtils——助力高效网络通信

HttpUtils——助力高效网络通信

时间:2024-09-02 17:23:52浏览次数:5  
标签:网络通信 助力 return 请求 HttpUtils url params null String


HttpUtils——助力高效网络通信

  • 使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可:
1、创建HttpClient对象。
2、创建请求方法的实例,并指定请求URL。如果需要发送GET请求,
创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
3、如果需要发送请求参数,可调用HttpGet、HttpPost
共同的setParams(HttpParams params)方法来添加请求参数;
对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)
方法来设置请求参数。
4、调用HttpClient对象的execute(HttpUriRequest request)
发送请求,该方法返回一个HttpResponse。
5、调用HttpResponse的getAllHeaders()、getHeaders(String name)
等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,
该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
6、释放连接。无论执行方法是否成功,都必须释放连接
  • 引入依赖
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.13</version>
    </dependency>
  • 工具类
@Slf4j
public class HttpUtils {

    public static String defaultEncoding = "utf-8";

    /**
     * 发送http post请求,并返回响应实体
     *
     * @param url 请求地址
     * @return url响应实体
     */
    public static String postRequest(String url) {
        return postRequest(url, null, null);
    }

    /**
     * <p>方法名: postRequest</p>
     * <p>描述: 发送httpPost请求</p>
     *
     * @param url
     * @param params
     * @return
     */
    public static String postRequest(String url, Map<String, Object> params) {
        return postRequest(url, null, params);
    }

    /**
     * 发送http post请求,并返回响应实体
     *
     * @param url     访问的url
     * @param headers 请求需要添加的请求头
     * @param params  请求参数
     * @return
     */
    public static String postRequest(String url, Map<String, String> headers,
                                     Map<String, Object> params) {
        String result = null;
        CloseableHttpClient httpClient = buildHttpClient();
        HttpPost httpPost = new HttpPost(url);
        if (null != headers && headers.size() > 0) {
            for (Entry<String, String> entry : headers.entrySet()) {
                String key = entry.getKey();
                String value = entry.getValue();
                httpPost.addHeader(new BasicHeader(key, value));
            }
        }

        if(isJSON(params.toString())){
            /**
             * json格式
             */
            StringEntity requestEntity = new StringEntity(params.toString(), "utf-8");
            requestEntity.setContentEncoding("UTF-8");
            httpPost.setHeader("Content-type", "application/json");
            httpPost.setEntity(requestEntity);
        }else{
            /**
             * 名称值对节点类型
             */
            if (null != params && params.size() > 0) {
                List<NameValuePair> pairList = new ArrayList<NameValuePair>(params.size());
                for (Map.Entry<String, Object> entry : params.entrySet()) {
                    NameValuePair pair = new BasicNameValuePair(entry.getKey(), entry.getValue().toString());
                    pairList.add(pair);
                }
                httpPost.setEntity(new UrlEncodedFormEntity(pairList, Charset.forName(defaultEncoding)));
            }
        }


        try {
            CloseableHttpResponse response = httpClient.execute(httpPost);
            try {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    log.info("【POST请求信息】,请求地址:{},请求参数:{}", url, params);
                    result = EntityUtils.toString(entity, Charset.forName(defaultEncoding));
                    log.info("【POST请求信息】,请求地址:{},请求参数:{},返回结果:{}", url, params,result);
                }
            } finally {
                response.close();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return result;
    }

    /**
     * 发送http get请求
     *
     * @param url 请求url
     * @return url返回内容
     */
    public static String getRequest(String url) {
        return getRequest(url, null);
    }


    /**
     * 发送http get请求
     *
     * @param url    请求的url
     * @param params 请求的参数
     * @return
     */
    public static String getRequest(String url, Map<String, Object> params) {
        return getRequest(url, null, params);
    }

    /**
     * 发送http get请求
     *
     * @param url        请求的url
     * @param headersMap 请求头
     * @param params     请求的参数
     * @return
     */
    public static String getRequest(String url, Map<String, String> headersMap, Map<String, Object> params) {
        String result = null;
        CloseableHttpClient httpClient = buildHttpClient();
        try {
            String apiUrl = url;
            if (null != params && params.size() > 0) {
                StringBuffer param = new StringBuffer();
                int i = 0;
                for (String key : params.keySet()) {
                    if (i == 0)
                        param.append("?");
                    else
                        param.append("&");
                    param.append(key).append("=").append(params.get(key));
                    i++;
                }
                apiUrl += param;
            }

            HttpGet httpGet = new HttpGet(apiUrl);
            if (null != headersMap && headersMap.size() > 0) {
                for (Entry<String, String> entry : headersMap.entrySet()) {
                    String key = entry.getKey();
                    String value = entry.getValue();
                    httpGet.addHeader(new BasicHeader(key, value));
                }
            }
            CloseableHttpResponse response = httpClient.execute(httpGet);
            try {
                HttpEntity entity = response.getEntity();
                if (null != entity) {
                    log.info("【GET请求信息】,请求地址:{},请求参数:{}", url, params);
                    result = EntityUtils.toString(entity, defaultEncoding);
                    log.info("【GET请求信息】,请求地址:{},请求参数:{},返回结果:{}", url, params,result);
                }
            } finally {
                response.close();
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 创建httpclient,支持http、https
     *
     * @return
     */
    public static CloseableHttpClient buildHttpClient() {
        try {
            RegistryBuilder<ConnectionSocketFactory> builder = RegistryBuilder
                    .create();
            ConnectionSocketFactory factory = new PlainConnectionSocketFactory();
            builder.register("http", factory);
            KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
            SSLContext context = SSLContexts.custom().useTLS()
                    .loadTrustMaterial(trustStore, new TrustStrategy() {
                        public boolean isTrusted(X509Certificate[] chain,
                                                 String authType) throws CertificateException {
                            return true;
                        }
                    }).build();
            LayeredConnectionSocketFactory sslFactory = new SSLConnectionSocketFactory(
                    context,
                    SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
            builder.register("https", sslFactory);
            Registry<ConnectionSocketFactory> registry = builder.build();
            PoolingHttpClientConnectionManager manager = new PoolingHttpClientConnectionManager(registry);
            ConnectionConfig connConfig = ConnectionConfig.custom()
                    .setCharset(Charset.forName(defaultEncoding)).build();
            SocketConfig socketConfig = SocketConfig.custom()
                    .setSoTimeout(100000).build();
            manager.setDefaultConnectionConfig(connConfig);
            manager.setDefaultSocketConfig(socketConfig);
            return HttpClientBuilder.create().setConnectionManager(manager)
                    .build();
        } catch (KeyStoreException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }


    public static boolean isJSON(String str) {
        boolean result = false;
        try {
            Object obj=JSON.parse(str);
            result = true;
        } catch (Exception e) {
            result=false;
        }
        return result;
    }

    public static void main(String[] args) {
        String url1 = "http://192.168.56.101:8196/test/get1";
        String result = HttpUtils.getRequest(url1);
        System.out.println(result);

        String url2 = "http://192.168.56.101:8196/test/get2";
        Map<String, Object> params = new HashMap<>();
        params.put("name", "一安未来1");
        params.put("addr", "北京1");
        String result2 = HttpUtils.postRequest(url2, null,params);
        System.out.println(result2);

        String url3 = "http://192.168.56.101:8196/test/get3";
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", "一安未来2");
        jsonObject.put("addr", "北京2");
        String result3 = HttpUtils.postRequest(url3, null,jsonObject);
        System.out.println(result3);
    }

【GET请求信息】,请求地址:http://192.168.56.101:8196/test/get1,请求参数:null
【GET请求信息】,请求地址:https://192.168.56.101:8196/test/get1,请求参数:null,返回结果:{"result":"success"}

【POST请求信息】,请求地址:http://192.168.56.101:8196/test/get2,请求参数:{name=一安未来1, addr=北京1}
【POST请求信息】,请求地址:http://192.168.56.101:8196/test/get2,请求参数:{name=一安未来1, addr=北京1},返回结果:{"name":"一安未来1","addr":"北京1"}

【POST请求信息】,请求地址:http://192.168.56.101:8196/test/get3,请求参数:{"name":"一安未来2","addr":"北京2"}
【POST请求信息】,请求地址:http://192.168.56.101:8196/test/get3,请求参数:{"name":"一安未来2","addr":"北京2"},返回结果:{"name":"一安未来2","addr":"北京2"}

}
  • 接口类
@RestController
public class TestController {


    @GetMapping("get1")
    public String test1(){
        return "{\"result\":\"success\"}";
    }


    @PostMapping("get2")
    private Map<String, Object> test2(@RequestParam Map<String,Object> map){
        return map;
    }

    @PostMapping("get3")
    private Map test3(@RequestBody Map<String,Object> map){
        return map;
    }

}


标签:网络通信,助力,return,请求,HttpUtils,url,params,null,String
From: https://blog.51cto.com/u_15903793/11899612

相关文章

  • 10个助力销售的邮件简报范例
    这些都是北美最受欢迎的通讯,它们有一个共同点:以易于获取的格式向人们提供他们在其他地方得不到的有用信息。你的品牌通讯不会完全像这些通讯一样。你有产品需要销售,你的电子邮件营销策略至少部分依赖于它所产生的收入。但这并不意味着你的通讯不应该有用。当你提到产品时,能否......
  • lg-soar:助力开发者腾飞的利器
    在开发的世界里,我们总是追求速度与效率。“lg-soar”就像开发者的翅膀,助你轻松起飞,翱翔于云端。今天,让我们一起深入探索这个平台的独特魅力,以及如何迅速掌握其使用技巧。平台概览“lg-soar”是一个全开放源码、高速度及高效率的开发平台。它不仅易于使用,而且具有极高的灵......
  • ScaleLLM: 高性能推理系统助力大型语言模型部署
    ScaleLLM:革新大型语言模型推理的新利器在人工智能快速发展的今天,大型语言模型(LLMs)已成为推动技术进步的重要力量。然而,这些庞大的模型在实际部署中常常面临效率和资源消耗的挑战。为了解决这一难题,ScaleLLM应运而生,为LLM推理带来了全新的可能性。什么是ScaleLLM?Scale......
  • Diffusion反馈强势助力CLIP秒变火眼金睛:北京智源研究院、中科院自动化所联合推出DIVA
    前言 本文分享论文DiffusionFeedbackHelpsCLIPSeeBetter,专注于通过自监督学习范式解决CLIP无法区分细粒度视觉细节的问题。欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。本文转载自我爱计算机视觉仅用于学术分享,若侵权......
  • 个人信息保护专业人员(CCRC-PIPP)助力企业数据要素合规有序流通
    在当今数字化时代,个人信息作为企业不可或缺的数据资产,其合规管理与高效流通变得尤为重要。组织须采纳必要措施保护用户信息,同时确保遵循相关法规要求。为此,中国网络安全审查认证和市场监管大数据中心推出了个人信息保护专业人员(CCRC-PIPP)能力认证项目,旨在培养更多专业精英,支......
  • 政务智能新时代:全栈国产化ChatGPT助力高效政务
    全栈国产化的政务办公专用ChatGPT产品,采用软硬一体的全国产技术栈,从芯片、服务器、大模型到最终用户功能,实现全面国产化。ChatGPT作为由OpenAI开发的一种先进的自然语言处理模型,已经在全球范围内广泛应用。凭借其强大的语言理解与生成能力,ChatGPT在各行各业显著提升了工作效......
  • 分享4大主流 Python IDE,助力你高效编写Python代码
    Python作为一门简洁易学、功能强大的编程语言,在各个领域都展现出了强大的魅力。而选择一款合适的IDE,则是提高Python开发效率的关键。本文将带你深入了解4大主流PythonIDE:PyCharm、Spyder、JupyterNotebook、VSCode,帮助你找到最适合自己的开发利器。PyCharm:专业开发......
  • 镭速助力企业B2B模式下的文档安全外发管理
    在数字化浪潮的推动下,企业间的文件交换已成为B2B交易模式中的关键一环。高效的文件交换不仅关系到企业运作的流畅性,更是企业信息安全的关键。本文将探讨B2B环境下文件交换的普遍需求和其重要性,分析潜在的安全风险,并介绍镭速技术在确保文件安全传输方面的应用策略。镭速技术:......
  • 聚焦数博会热点之数据价值化 | KPaaS助力企业释放数据潜力
     随着数字经济的蓬勃发展,数据已逐渐成为企业最核心的资产之一。8月28日盛大开幕的2024中国国际大数据产业博览会(简称“数博会”)上,数据价值化成为年度大数据领域的六大热点主题之一。如何充分挖掘并实现数据的潜在价值,成为了众多企业面临的重大课题。在这一背景下,KPaaS作为领先......
  • 从战略到执行:解密敏捷企业架构的变革之道,助力企业未来增长
    敏捷企业架构的新时代与变革契机在数字化转型浪潮中,企业正面临前所未有的市场挑战与技术机遇。传统企业架构(EnterpriseArchitecture,EA)虽然能够为企业提供稳定的战略支持,但其应对市场快速变化的能力不足。而敏捷方法(Agile)以其高效迭代和灵活性,正在迅速改变企业的运营方式。......