国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RestTemplate 請(qǐng)求https接口,無(wú)需證書(shū)訪問(wèn),并整合工具類(lèi),細(xì)到極致

這篇具有很好參考價(jià)值的文章主要介紹了RestTemplate 請(qǐng)求https接口,無(wú)需證書(shū)訪問(wèn),并整合工具類(lèi),細(xì)到極致。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

??Hello,大家好呀,我是你們的Jessica老哥,不知不覺(jué),到了3月份了,又是一年一度的金三銀四,老哥和大家一樣,想換工作,于是呢,更新資料,投簡(jiǎn)歷。試想著把自己的勞動(dòng)價(jià)值賣(mài)的更高一點(diǎn)。
??沒(méi)想到,今年好像行情有點(diǎn)不太對(duì)勁呀,往年跟HR打個(gè)招呼,人家還會(huì)要你簡(jiǎn)歷,可現(xiàn)在呢,人家是已讀不回,硬氣了。也許是老哥的學(xué)歷低,再加上大環(huán)境不好和學(xué)編程的人越來(lái)越多,不好找工作咯。算了,算了,老哥繼續(xù)茍著吧。

這次給大家?guī)?lái)的是 RestTemplate 請(qǐng)求https接口,我們都知道,https接口一般是需要證書(shū)才能訪問(wèn)的,但是我們可以采取一些特殊的手段,跳過(guò)證書(shū)驗(yàn)證。下面,老哥講下具體的代碼

1、首先,配置一個(gè) RestTemplate的bean,說(shuō)明:RestTemplate是spring-web自帶的,我們不需要額外引入什么包

@Configuration
public class RestTemplateConfig {

 /**
     * 構(gòu)建支持忽略自簽名證書(shū)的Restemplate的bean
     * @return 支持發(fā)起https請(qǐng)求的RestTemplate對(duì)象
     * @throws KeyStoreException 證書(shū)異常
     * @throws NoSuchAlgorithmException 加密算法不可用異常
     * @throws KeyManagementException 密鑰管理異常
     */
    @Bean("httpsTemplate")
    public RestTemplate createHttpsRestTemplate()
            throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
        TrustStrategy acceptingTrustStrategy = (x509Certificates, authType) -> true;
        SSLContext sslContext = SSLContexts.custom()
                .loadTrustMaterial(null, acceptingTrustStrategy)
                .build();
        SSLConnectionSocketFactory sslFactory = new SSLConnectionSocketFactory(
                sslContext, new NoopHostnameVerifier());

        CloseableHttpClient httpClient = HttpClients.custom()
                .setSSLSocketFactory(sslFactory)
                .build();

        HttpComponentsClientHttpRequestFactory factory =
                new HttpComponentsClientHttpRequestFactory();
        factory.setConnectTimeout(3600000);
        factory.setReadTimeout(3600000);

        factory.setHttpClient(httpClient);

        return new RestTemplate(factory);
    }

}

2、然后,配置一下 RestTemplate 工具類(lèi)

@Slf4j
@Component
public class RestTemplateUtil {
    private static RestTemplate restTemplate;

    @Autowired
    private RestTemplate httpsTemplate;

    @PostConstruct
    public void afterPropertiesSet() {
        RestTemplateUtil.restTemplate = httpsTemplate;
    }

    /**
     * Get 請(qǐng)求 不帶參數(shù) 沒(méi)有請(qǐng)求頭 沒(méi)有請(qǐng)求參數(shù) 沒(méi)有請(qǐng)求體
     * @param url
     * @return
     */
    public static String sendSimple(String url) {
        return sendSimple(url, null, HttpMethod.GET, null,new HttpHeaders());
    }

    /**
     * Get 請(qǐng)求 url帶請(qǐng)求參數(shù)
     * @param url
     * @param urlParam
     * @return
     */
    public static String sendSimple(String url, Map<String, ?> urlParam) {
        return sendSimple(url, urlParam, HttpMethod.GET);
    }

    /**
     * Get 請(qǐng)求 url帶請(qǐng)求參數(shù) 請(qǐng)求頭攜帶參數(shù)
     * @param url
     * @param urlParam
     * @param headers
     * @return
     */
    public static String sendSimple(String url, Map<String, ?> urlParam, HttpHeaders headers) {
        return sendSimple(url, urlParam, HttpMethod.GET,null, headers);
    }

    public static String sendSimple(String url, Map<String, ?> urlParam, HttpMethod method) {
        return sendSimple(url, urlParam, method, null,new HttpHeaders());
    }

    /**
     * Get發(fā)送簡(jiǎn)單請(qǐng)求,不含body
     *
     * @param url      url
     * @param urlParam 用?和&拼接在url后面的參數(shù)
     * @param method   請(qǐng)求方式
     * @param headers  請(qǐng)求頭
     * @return body
     */
    public static String sendSimple(String url, Map<String, ?> urlParam, HttpMethod method, Map<String, ?> header,HttpHeaders headers) {
        if (urlParam == null) {
            urlParam = new HashMap<>(0);
        }
        // url參數(shù)拼接
        url = handleUrlParam(url, urlParam);

        //填充屬性到請(qǐng)求頭
        fillParamsToHttpHeader(header,headers);

        HttpEntity<MultiValueMap<String, ?>> requestEntity = new HttpEntity<>(null, headers);

        log.info("請(qǐng)求地址為: "+url);

        return restTemplate.exchange(url, method, requestEntity, String.class, urlParam).getBody();
    }

    /**
     * 表單提交,沒(méi)有請(qǐng)求頭和url拼接,有請(qǐng)求體
     * @param url
     * @param body
     * @return
     */
    public static String sendForm(String url, Map<String, Object> body) {
        return sendForm(url, null, body, HttpMethod.POST, new HttpHeaders());
    }

    /**
     * 表單提交,有url拼接和請(qǐng)求體
     * @param url
     * @param body
     * @return
     */
    public static String sendForm(String url, Map<String, ?> urlParam, Map<String, Object> body) {
        return sendForm(url, urlParam, body, HttpMethod.POST, new HttpHeaders());
    }

    /**
     * 表單提交,有url拼接和請(qǐng)求頭、請(qǐng)求體
     * @param url
     * @param urlParam
     * @param header
     * @param body
     * @return
     */
    public static String sendForm(String url, Map<String, ?> urlParam,Map<String, ?> header, Map<String, Object> body) {
        return sendForm(url, urlParam, body, HttpMethod.POST, new HttpHeaders());
    }

    /**
     * 表單提交,有請(qǐng)求頭和請(qǐng)求體 指定請(qǐng)求方式
     * @param url
     * @param urlParam
     * @param body
     * @param method
     * @return
     */
    public static String sendForm(String url, Map<String, ?> urlParam, Map<String, Object> body, HttpMethod method) {
        return sendForm(url, urlParam, body, method, new HttpHeaders());
    }

    public static String sendForm(String url,Map<String, ?> header, Map<String, Object> body,
                                  HttpMethod method, HttpHeaders headers) {
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        return send(url, header, body, method, headers,null);
    }

    public static String sendForm(String url, Map<String, ?> header,Map<String, Object> body,
                                  HttpMethod method, HttpHeaders headers, Map<String, ?> urlParam) {
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        return send(url, header,body, method, headers,urlParam);
    }

    public static String sendJson(String url, Map<String, Object> body) {
        return sendJson(url, null, body, HttpMethod.POST, new HttpHeaders());
    }

    public static String sendJson(String url, Map<String, ?> urlParam, Map<String, Object> body) {
        return sendJson(url, urlParam, body, HttpMethod.POST, new HttpHeaders());
    }

    public static String sendJson(String url, Map<String, ?> head, Map<String, Object> body, HttpMethod method,Map<String, ?> urlParam) {
        return sendJson(url, head, body, method, new HttpHeaders(),urlParam);
    }

    public static String sendJson(String url, Map<String, ?> head, Map<String, Object> body,
                                  HttpMethod method, HttpHeaders headers,Map<String, ?> urlParam) {
        headers.setContentType(MediaType.APPLICATION_JSON);
        return send(url, head, body, method, headers,urlParam);
    }

    /**
     * 復(fù)雜請(qǐng)求發(fā)送
     *
     * @param url      url
     * @param head     請(qǐng)求頭
     * @param body     請(qǐng)求體
     * @param method   請(qǐng)求方式
     * @param headers  實(shí)際請(qǐng)求頭
     * @param urlParam 用?和&拼接在url后面的參數(shù)
     *
     */
    public static String send(String url, Map<String, ?> head,Map<String, Object> body, HttpMethod method,
                              HttpHeaders headers, Map<String, ?> urlParam) {
        try {
            if (urlParam == null) {
                urlParam = new HashMap<>(16);
            }
            // Get 請(qǐng)求 url參數(shù)拼接
            if (method.equals(HttpMethod.GET)){
                url = handleUrlParam(url, urlParam);
            }

            //填充參數(shù)到Http請(qǐng)求頭
            fillParamsToHttpHeader(head,headers);

            log.info("請(qǐng)求地址為: "+url);

            if (Objects.equals(headers.getContentType(), MediaType.APPLICATION_JSON)) {
                String str=null;
                if (Objects.isNull(body)){
                    str=new JSONObject().toJSONString();
                }else {
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.putAll(body);
                    str=jsonObject.toJSONString();
                }
                HttpEntity<String> requestEntity = new HttpEntity<>(str,headers);
                return restTemplate.postForEntity(url,requestEntity,String.class).getBody();
            }
            if (Objects.equals(headers.getContentType(), MediaType.APPLICATION_FORM_URLENCODED)) {
                // body參數(shù)處理
                MultiValueMap<String,String> param =new LinkedMultiValueMap<>();
                for (Map.Entry<String, ?> next : body.entrySet()) {
                    param.add(next.getKey(), (String) next.getValue());
                }

                HttpEntity <MultiValueMap<String,String>>  requestEntity = new HttpEntity<>(param, headers);
                return restTemplate.exchange(url, method, requestEntity, String.class, urlParam).getBody();
            }
        }catch (Exception e){
            log.error(e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    /**
     * url參數(shù)拼接
     *
     * @param url
     * @param urlParam
     * @return
     */
    private static String handleUrlParam(String url, Map<String, ?> urlParam) {
        if (urlParam == null || urlParam.isEmpty()) {
            return url;
        }
        Iterator<? extends Map.Entry<String, ?>> iterator = urlParam.entrySet().iterator();
        StringBuilder urlBuilder = new StringBuilder(url);
        urlBuilder.append("?");
        while (iterator.hasNext()) {
            Map.Entry<String, ?> entry = iterator.next();
            urlBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
        }
        urlBuilder.deleteCharAt(urlBuilder.length() - 1);
        return String.valueOf(urlBuilder);
    }

    /**
     * 填充參數(shù)到請(qǐng)求頭
     *
     * @param heads
     * @param headers
     */
    public static void fillParamsToHttpHeader(Map<String,?> heads, HttpHeaders headers) {
        if (!Objects.isNull(heads)) {
            Set<String> keySet = heads.keySet();
            for (String s : keySet) {
                headers.add(s,String.valueOf(heads.get(s)));
            }
        }
    }


}

3、使用,只需要按照下面的模板,傳遞參數(shù)即可

   public static void main(String[] args) {
        //分別填入請(qǐng)求頭和請(qǐng)求體參數(shù)即可
        Map<String, Object> headerMap = new ConcurrentHashMap<>(16);
        Map<String, Object> bodyMap = new ConcurrentHashMap<>(16);

        String url = String.format("https://%s/test", "你的主機(jī)地址");
        String jsonStr = RestTemplateUtil.sendForm(url, headerMap, bodyMap);
        User user = JSONObject.parseObject(jsonStr, User.class);
        System.out.println(user);
    }

3A、最后,各位小伙伴,麻煩給老哥一個(gè)點(diǎn)贊、關(guān)注、收藏三連好嗎,你的支持是老哥更新最大的動(dòng)力,謝謝!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-718759.html

到了這里,關(guān)于RestTemplate 請(qǐng)求https接口,無(wú)需證書(shū)訪問(wèn),并整合工具類(lèi),細(xì)到極致的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot整合自簽名SSL證書(shū),轉(zhuǎn)變HTTPS安全訪問(wèn)(單向認(rèn)證服務(wù)端)

    SpringBoot整合自簽名SSL證書(shū),轉(zhuǎn)變HTTPS安全訪問(wèn)(單向認(rèn)證服務(wù)端)

    HTTP 具有相當(dāng)優(yōu)秀和方便的一面,然而 HTTP 并非只有好的一面,事物皆具兩面性,它也是有不足之處的。例如: 通信使用明文(不加密),內(nèi)容可能會(huì)被竊聽(tīng)。 不驗(yàn)證通信方的身份,因此有可能會(huì)遭遇偽裝。 無(wú)法證明報(bào)文的完整性,所以有可能會(huì)遭篡改等。 因HTTP有存在通信

    2024年02月06日
    瀏覽(25)
  • restTemplate轉(zhuǎn)發(fā)Https請(qǐng)求

    restTemplate轉(zhuǎn)發(fā)Https請(qǐng)求

    代碼架構(gòu) 效果

    2024年02月08日
    瀏覽(17)
  • 解鎖新技能RestTemplate設(shè)置全局、單個(gè)請(qǐng)求超時(shí)時(shí)間及支持https請(qǐng)求

    springboot請(qǐng)求第三方接口時(shí)會(huì)用到RestTemplate,其底層實(shí)現(xiàn)邏輯默認(rèn)是通過(guò)SimpleClientHttpRequestFactory來(lái)實(shí)現(xiàn),具體由socket連接來(lái)實(shí)現(xiàn);可以替換其默認(rèn)實(shí)現(xiàn)為HttpComponentsClientHttpRequestFactory。 一、自定義RestTemplate實(shí)例對(duì)象 二、RestTemplate自定義全局超時(shí)時(shí)間 三、RestTemplate設(shè)置單個(gè)請(qǐng)求

    2023年04月09日
    瀏覽(18)
  • SpringBoot 使用RestTemplate來(lái)調(diào)用https接口

    使用RestTemplate來(lái)訪問(wèn)第三方https接口,接口類(lèi)型為POST,返回?cái)?shù)據(jù)為JSON,需要忽略https證書(shū),因此對(duì)RestTemplate 進(jìn)行配置,通過(guò)HttpClient的請(qǐng)求工廠(HttpComponentsClientHttpRequestFactory)進(jìn)行構(gòu)建。HttpComponentsClientHttpRequestFactory使用一個(gè)信任所有站點(diǎn)的HttpClient就可以解決問(wèn)題了。 中間

    2024年02月13日
    瀏覽(22)
  • Java工具類(lèi):使用RestTemplate請(qǐng)求WebService接口

    對(duì)接第三方提供的 WebService 接口,早期的調(diào)用方式過(guò)于復(fù)雜繁瑣,所以使用 RestTemplate 進(jìn)行調(diào)用 注:除了 RestTemplate 之外, HttpURLConnection 等也可以用來(lái)調(diào)用webservice接口 如果需要將xml轉(zhuǎn)為Json,可參考:

    2024年01月22日
    瀏覽(22)
  • RestTemplate發(fā)起HTTPS請(qǐng)求Unsupported or unrecognized SSL message 報(bào)錯(cuò)解決

    原因:RestTemplate默認(rèn)是不支持HTTPS請(qǐng)求的,那么如果想使用RestTemplate發(fā)送一個(gè)HTTPS的請(qǐng)求 ,就需要對(duì)證書(shū)進(jìn)行處理,這里記錄一下一個(gè)可行的方法忽略證書(shū)的校驗(yàn)。 使用 RestTemplateBuilder 來(lái)構(gòu)建一個(gè) RestTemplate ,而非使用默認(rèn)。 requestFactory() 方法用來(lái)設(shè)置 ClientHttpRequestFactory 。

    2024年02月11日
    瀏覽(18)
  • HTTPS請(qǐng)求忽略SSL證書(shū)

    現(xiàn)場(chǎng)環(huán)境: 后端服務(wù)部署在docker內(nèi),遠(yuǎn)程調(diào)用https接口,線上報(bào)錯(cuò): unable to find valid certification path to requested target 解決方案: 設(shè)置SSLSocketFactory忽略證書(shū)校驗(yàn) 實(shí)現(xiàn)案例: 使用的cn.hutool.http.HttpRequest工具類(lèi)請(qǐng)求的數(shù)據(jù),支持設(shè)置頭部、表單、body、超時(shí)時(shí)間等關(guān)鍵信息 工具類(lèi) SSL

    2024年02月11日
    瀏覽(23)
  • 萬(wàn)字長(zhǎng)文講解調(diào)用第三方接口,RestTemplate,urlConnection使用詳解,java代碼模擬postman發(fā)送請(qǐng)求

    萬(wàn)字長(zhǎng)文講解調(diào)用第三方接口,RestTemplate,urlConnection使用詳解,java代碼模擬postman發(fā)送請(qǐng)求

    業(yè)務(wù)場(chǎng)景 :在日常開(kāi)發(fā)中,經(jīng)常需要調(diào)用第三方接口,例如調(diào)用物流接口,此時(shí)需要利用urlConnection或者restTemplate模擬postman發(fā)送請(qǐng)求,請(qǐng)求支持加header ,設(shè)置content-type支持傳遞json;請(qǐng)求方式get,post,也可以需要傳遞文件,或者傳遞文件流; 下面這個(gè)例子就包含日常開(kāi)發(fā)中大

    2024年02月05日
    瀏覽(22)
  • Tomcat配置https(jks證書(shū)請(qǐng)求)

    Tomcat配置https(jks證書(shū)請(qǐng)求)

    提示:文章寫(xiě)完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 上一篇文章已經(jīng)提到tomcat的pfx證書(shū)請(qǐng)求和開(kāi)啟https的做法 鏈接https://blog.csdn.net/qq_46153140/article/details/123344395?spm=1001.2014.3001.5501 這篇文章則是tomcat的jks的生成 生成思路: key+csr=crt;crt+key = pfx;pfx+key=jks?

    2024年02月16日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包