http方式调用接口

2024-09-07 08:38
文章标签 接口 http 方式 调用

本文主要是介绍http方式调用接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

话不多说,直接上代码

public class HttpRequestUtils {
    private static final Logger logger = LoggerFactory.getLogger(HttpRequestUtils.class);
    private static final String CHARSET_UTF_8 = "UTF-8";

    private static final String HTTP = "http";
    private static final String HTTPS = "https";
    private static SSLConnectionSocketFactory sslsf = null;
    private static PoolingHttpClientConnectionManager cm = null;
    private static SSLContextBuilder builder = null;
    
    
    static {
        try {
            builder = new SSLContextBuilder();
            // 全部信任 不做身份鉴定
            builder.loadTrustMaterial(null, new TrustStrategy() {
                @Override
                public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                    return true;
                }
            });
            sslsf = new SSLConnectionSocketFactory(builder.build(),
                    new String[] { "SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2" }, null, NoopHostnameVerifier.INSTANCE);
            Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory> create()
                    .register(HTTP, new PlainConnectionSocketFactory()).register(HTTPS, sslsf).build();
            cm = new PoolingHttpClientConnectionManager(registry);
            cm.setMaxTotal(1000);// max connection
        } catch (Exception e) {
            logger.error("ssl init error", e);
        }
    }

    private HttpRequestUtils() {
    }

    public static String postWithStringParam(String url, Object toJson) {
        return postWithStringParam(url, JsonUtils.objectToJson(toJson));
    }

    public static String postWithStringParam(String url, String stringParam) {
        logger.info("url:{}, param:{}", url, stringParam);
        CloseableHttpClient httpClient = null;
        try {
    
            int connectionTimeout = Integer.parseInt(getProperty("tbp.resource.web.connectionTimeout", "60000")) ;
            int timeout = Integer.parseInt(getProperty("tbp.resource.web.timeout", "60000")); 
            int socketTimeout = Integer.parseInt(getProperty("tbp.resource.web.socketTimeout", "60000"));
            httpClient = HttpClients.custom().disableAutomaticRetries().build();
            HttpPost httpPost = new HttpPost(url);
            RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(connectionTimeout)
                    .setConnectionRequestTimeout(timeout).setSocketTimeout(socketTimeout).build();
            
            
            if(!StringUtils.isEmpty(stringParam)){
                StringEntity entity = new StringEntity(stringParam, CHARSET_UTF_8);// 解决中文乱码问题
                entity.setContentEncoding(CHARSET_UTF_8);
                entity.setContentType("application/json");
                httpPost.setEntity(entity);
            }
            httpPost.setConfig(requestConfig);
            return httpClient.execute(httpPost, new ResponseHandler<String>() {
                @Override
                public String handleResponse(HttpResponse response) throws IOException {
                    int statusCode = response.getStatusLine().getStatusCode();
                    if (statusCode == HttpStatus.SC_OK || statusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR) {
                        return EntityUtils.toString(response.getEntity(), CHARSET_UTF_8);
                    }
                    throw new IOException(response.toString());
                }
            });
        } catch (IOException e) {
            logger.error("HttpRequestUtils.postWithStringParam error,url:" + url + ",stringParam:" + stringParam, e);
            throw new ResourceRuntimeException("网络繁忙,请稍后再试.");
        } finally {
            HttpClientUtils.closeQuietly(httpClient);
        }
    }
    
    /**
     * 
     * 描述:(取资源文件里面的信息). <br/>   
     *  
     * @author 80000449  2018年11月6日下午8:28:00 
     *
     * @param key
     * @param defualtValue
     * @return
     */
    private static String getProperty(String key, String defualtValue){
        return PropertiesManager.instance().getString(key, defualtValue);
    }
    
    /**
     * 发送 SSL GET 请求(HTTPS)
     * 
     * @param url
     * @return
     */
    public static String getSSL(String url) {
        CloseableHttpClient httpClient = null;
        try {
            httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).setConnectionManager(cm)
                    .setConnectionManagerShared(true).disableAutomaticRetries().build();
            HttpGet httpGet = new HttpGet(url);

            return httpClient.execute(httpGet, new ResponseHandler<String>() {
                @Override
                public String handleResponse(HttpResponse response) throws IOException {
                    int statusCode = response.getStatusLine().getStatusCode();
                    if (statusCode == HttpStatus.SC_OK || statusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR) {
                        return EntityUtils.toString(response.getEntity(), CHARSET_UTF_8);
                    }
                    return null;
                }
            });
        } catch (IOException e) {
            logger.error("HttpRequestUtils.getSSL error,url:" + url, e);
            throw new ResourceRuntimeException(e);
        } finally {
            HttpClientUtils.closeQuietly(httpClient);
        }
    }
    
    /**
     * 发送 SSL POST 请求(HTTPS)
     * 
     * @param url
     * @param toJson
     * @return
     */
    public static String postSSLWithJsonParam(String url, Object toJson) {
        return postSSL(url, JsonUtils.objectToJson(toJson));
    }
    
    /**
     * 发送 SSL POST 请求(HTTPS)
     * 
     * @param url
     * @param stringParam
     * @return
     */
    public static String postSSL(String url,String stringParam) {
        CloseableHttpClient httpClient = null;
        try {
            httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).setConnectionManager(cm)
                    .setConnectionManagerShared(true).disableAutomaticRetries().build();
            HttpPost httpPost = new HttpPost(url);

            StringEntity entity = new StringEntity(stringParam, CHARSET_UTF_8);// 解决中文乱码问题
            entity.setContentEncoding(CHARSET_UTF_8);
            entity.setContentType("application/json");
            httpPost.setEntity(entity);

            return httpClient.execute(httpPost, new ResponseHandler<String>() {
                @Override
                public String handleResponse(HttpResponse response) throws IOException {
                    int statusCode = response.getStatusLine().getStatusCode();
                    if (statusCode == HttpStatus.SC_OK || statusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR) {
                        return EntityUtils.toString(response.getEntity(), CHARSET_UTF_8);
                    }
                    return null;
                }
            });
        } catch (IOException e) {
            logger.error("HttpRequestUtils.postSSL error,url:" + url, e);
            throw new ResourceRuntimeException(e);
        } finally {
            HttpClientUtils.closeQuietly(httpClient);
        }
    }
}

使用方式

String result = HttpRequestUtils.postWithStringParam(taskUrl+"/fullDayResultService/fullDayActualDistance", params);// params 不传可为null

这篇关于http方式调用接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144594

相关文章

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要设置昵称 发送消息与消息展示 提示用户不能发送空消息 后端接口 发送消息 DB = []@ro

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency> 编写一个AES加密

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而