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

相关文章

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文