java https请求,https请求如何调用-程序员宅基地

技术标签: ssl安全证书的链接调用  java  网络  RestTemplate  http  https  

https协议(Secure Hypertext Transfer Protocol) :

安全超文本传输协议, HTTPS以保密为目标研发, 简单讲HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、 身份认证的网络协议, 其安全基础是SSL协议, 因此加密的详细内容请看SSL。 全称Hypertext Transfer Protocol overSecure Socket Layer。句法类同http:体系。 用于安全的HTTP数据传输。 https:URL表明它使用了HTTP, 但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。

HTTPS和HTTP的区别:

一、 https协议需要到ca申请证书, 一般免费证书很少, 需要交费。

二、 http是超文本传输协议, 信息是明文传输, https 则是具有安全性的ssl加密传输协议。

三、 http和https使用的是完全不同的连接方式, 用的端口也不一样, 前者是80,后者是443。

四、 http的连接很简单, 是无状态的; HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、 身份认证的网络协议, 比http协议安全。

问题描述:

当在网页中访问http请求的时候网页会自动将http请求转换为https请求 并提示如下:

 并且采用http那个链接采用postman请求接口时不通,那么可将原接口修改为https的请求 测试成功。

那么代码中如何调用呢?

直接上代码 工具类如下:

import java.io.IOException;
import java.nio.charset.Charset;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;

import net.sf.json.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HttpsUtils {
    private static Logger logger = LoggerFactory.getLogger(HttpsUtils.class);
    static CloseableHttpClient httpClient;
    static CloseableHttpResponse httpResponse;

    public static CloseableHttpClient createSSLClientDefault() {
        try {
            SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
                // 信任所有
                public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                    return true;
                }
            }).build();
            HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
            return HttpClients.custom().setSSLSocketFactory(sslsf).build();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyStoreException e) {
            e.printStackTrace();
        }
        return HttpClients.createDefault();

    }

    /**
     * 发送https请求
     *
     * @throws Exception
     */
    public static String sendByHttp(JSONObject jsonObject, String url) {
        try {

            HttpPost httpPost = new HttpPost(url);

            httpPost.addHeader("Content-type", "application/json; charset=utf-8");
            httpPost.setHeader("Accept", "application/json");
            httpPost.setEntity(new StringEntity(jsonObject.toString(), Charset.forName("UTF-8")));
            httpClient = HttpsUtils.createSSLClientDefault();
            httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            if (httpEntity != null) {
                String jsObject = EntityUtils.toString(httpEntity, "UTF-8");
                return jsObject;
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            try {
                httpResponse.close();
                httpClient.close();
                logger.info("请求流关闭完成");
            } catch (IOException e) {
                logger.info("请求流关闭出错");
                e.printStackTrace();
            }
        }
    }
    
     /**
     * 发送https get请求
     *
     * @throws Exception
     */
    public static String sendByHttpGet(Map<String, Object> params, String url) {
        try {
            URIBuilder uriBuilder = new URIBuilder(url);
            if(MapUtils.isNotEmpty(params)) {
                for (Map.Entry<String, Object> entry : params.entrySet()) {
                    uriBuilder.setParameter(entry.getKey(), entry.getValue().toString());
                }
            }
            HttpGet httpGet = new HttpGet(uriBuilder.build());
            httpGet.addHeader("Content-type", "application/json; charset=utf-8");
            httpGet.setHeader("Accept", "application/json");
            httpClient = HttpsUtils.createSSLClientDefault();
            httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            if (httpEntity != null) {
                String jsObject = EntityUtils.toString(httpEntity, "UTF-8");
                return jsObject;
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            try {
                httpResponse.close();
                httpClient.close();
                logger.info("请求流关闭完成");
            } catch (IOException e) {
                logger.info("请求流关闭出错");
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws Exception {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("idCard","***");
        jsonObject.put("peopleName","***");
        System.out.println(HttpsUtils.sendByHttp(jsonObject, "https://60.214.234.91/sam/*/*/*"));;
    }

}

经测试 调用成功!

之前一直采用RestTemplate调用没有成功 ! 有用这个调用成功的可在评论区指点一下,学习学习 感谢各路大神!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/IT_51888_liang/article/details/126699407

智能推荐

怎么实现EDIUS中白平衡的快速调整-程序员宅基地

文章浏览阅读301次。  拍摄素材的白平衡错掉怎么用EDIUS很 快校正呢?这也许是很多剪辑师苦恼的问题。摄像新手刚开始拍摄时,往往对专业摄像机的滤镜在不同光线环境中所打的档次不同而导致画面偏色,即使老手在光线 比较复杂的环境情况下,有时也把握不好在不同位置的摄像“白平衡”校正,特别是时时来不及校正又没有使用“自动..._eduis自动白平衡

3.利用抽象类编写一个程序实现公交车卡售票管理。当输入为“老年卡”、“学生卡”和“普通卡”时显示不同的卡类,及购票金额(“老年卡”购票金额=原价*50%、“学生卡”购票金额=原价*60%、“普通卡”购...-程序员宅基地

文章浏览阅读382次。下面是一种可能的实现方式:创建一个抽象类 Card,包含以下成员函数:构造函数:用于初始化卡的信息充值函数:用于向卡内充值金额余额查询函数:用于查询卡内的余额刷卡消费函数:用于在刷卡时扣除相应的金额纯虚函数:用于完成刷卡种类显示和设置折扣率的操作创建三个派生类 OldCard、StudentCard 和 NormalCard,分别表示老年卡、学生卡和普通卡。这三个类都从 C..._公交卡售票管理系统

Ubuntu 编译GLIBC_ubuntu glibc编译-程序员宅基地

文章浏览阅读1.5k次。GLIBC版本过低或者重新编译1、下载GLIBC源下载地址2、解压tar -zxvf 文件名3、在解压后的目录中创建build文件夹4、进入build文件夹,执行命令:…/configure中途会提示安装gawk:apt install gawk,安装后再次执行…/configure..._ubuntu glibc编译

CoreTelephony框架的简单使用_definition of 'ctcarrier' must be imported from mo-程序员宅基地

文章浏览阅读1.5w次。本文简单地使用了CoreTelephony这个曾经的私有框架来输出手机的运营商信息和通话信息。_definition of 'ctcarrier' must be imported from module 'coretele

Springboot 全局异常处理-程序员宅基地

文章浏览阅读87次。Springboot异常处理1、现在工作了,用的不是springboot,这篇博客只是用来记录操作,不太多解释直接上代码,不bb,package com.dly.utils;import com.dly.exception.CmsException;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.RestControlle

vue中使用swiper实现左右滑动切换图片_vue图片滑动切换-程序员宅基地

文章浏览阅读4.7k次。使用npm 安装vue-awesome-swipernpm install vue-awesome-swiper --save在main.js中引用import VueAwesomeSwiper from 'vue-awesome-swiper'Vue.user(VueAwesomeSwiper)import 'swiper/dist/css/swiper.css'在组件..._vue图片滑动切换

随便推点

Celery 之异步任务、定时任务、周期任务-程序员宅基地

文章浏览阅读114次。什么是Celery?Celery 是芹菜Celery 是基于Python实现的模块, 用于执行异步定时周期任务的其结构的组成是由 1.用户任务 app 2.管道 broker 用于存储任务 官方推荐 redis rabbitMQ / backend 用于存储任务执行结果的 3.员工 worker一 异步任务 1 from celery import Cel..._celery 异步任务 定时任务 周期任务

Jmeter 控制台-启动报错:Could not initialize class org.apache.jmeter.gui.util.MenuFactory-程序员宅基地

文章浏览阅读3k次。1.下载:plugins-manager.jar包2.地址:https://jmeter-plugins.org/install/Install/3.将jar包放到lib/ext4.重启jmeter_could not initialize class org.apache.jmeter.gui.util.menufactory

SQL注入---大小写绕过_大小写注入-程序员宅基地

文章浏览阅读705次。WEB安全篇 SQL注入绕过技术 02 大小写转换 NULL值 N值 双引号 十六进制绕过注入1、大小写转换select * from users where id=1 Union sEleCT 1,2,3,4;在less中测试内容被过滤空格被过滤掉用%0a替换空格,空格未被过滤爆出账号密码http://192.168.50.185:7766/Less-27/?id=9999%27%0AUniOn%0ASelecT%0A1,(SelecT%0Agroup__大小写注入

Autoleaders控制组——51单片机学习笔记(2)-程序员宅基地

文章浏览阅读1.6k次,点赞55次,收藏31次。LCD1602是一块两排的液晶显示屏,可以输出字母,数字或者一些符号,相比数码管,它可以显示的信息更多,但也使它更加难以解释。这是一个原理简单,但驱动操作比较复杂的外设。这是关于驱动液晶显示屏的代码。//引脚配置://函数定义:/*** @brief LCD1602延时函数,可延时1ms* @param 无* @retval 无*/_nop_();_nop_();_nop_();i = 11;j = 190;do/*** @brief LCD1602写命令。

delphi MessageBox 用法_delphi msgboxsel 引用单元-程序员宅基地

文章浏览阅读3.8k次。delphi MessageBox 用法 1.最简单用法,不带图形MessageBox(0,不同意,提示,MB_OK);MessageBox(0,不同意,提示,MB_OKCANCEL );2.警告对话框:MessageBox(0,密码不能为空,请务必输入密码,警告,MB_ICONEXCLAMATION);3.提示信息对话框:MessageBo_delphi msgboxsel 引用单元

开启固定拨号FDN功能,发送信息时如何做FDN检测_只能向固定拨号号码发信息什么意思-程序员宅基地

文章浏览阅读2.7k次。开启固定拨号FDN功能,发送信息时如何做FDN1. FDN概念固定拨号,FDN(Fixed dialer number),就是只允许呼出FDN菜单中自己输入的电话号码,设定指定拨号后,你的手机只能拨出有限的几个号码啦,也只能接听FDN中的号码。但是,紧急呼叫是不受该限制的。设定指定拨号需要你的pin2码。一般移动公司是不会提供这个码的,需要个人和移动公司交流才能得到。2. FD_只能向固定拨号号码发信息什么意思