一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用java代碼設(shè)置代理服務(wù)器?

汽車電子技術(shù) ? 來源: 程序猿南梔 ? 作者:程序猿南梔 ? 2023-01-20 10:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

關(guān)于如何使用java代碼設(shè)置代理服務(wù)器

在今年年底和外資合作做的一個項目中,由于客戶限制了服務(wù)器的外網(wǎng)訪問權(quán)限,導(dǎo)致很多涉及到了第三方的API都無法進(jìn)行訪問,小編給項目組的成員提了一個建議

由于項目組的開發(fā)人員公共使用的調(diào)用第三方的工具類是基于org.springframework.web.client.RestTemplate進(jìn)行開發(fā)的,所以本節(jié)我們就講解RestTemplate中如何使用java代理

1.)當(dāng)使用的代理服務(wù)器不需要密碼驗證時(使用系統(tǒng)參數(shù)進(jìn)行設(shè)置代理)'作用域:整個系統(tǒng)'

static {
        String proxyHost = "代理的ip地址或域名";
        String proxyPort = "代理的端口";
        System.getProperties().setProperty("proxySet", "true");

        System.getProperties().setProperty("http.proxyHost", proxyHost);

        System.getProperties().setProperty("http.proxyPort", proxyPort);

        System.getProperties().setProperty("https.proxyHost", proxyHost);

        System.getProperties().setProperty("https.proxyPort", proxyPort);
}

上面這一部分代碼可以放到RestTemplate工具類中,在項目進(jìn)行啟動的時候就進(jìn)行全局設(shè)置代理,這個方法的作用范圍是整個系統(tǒng);

2.)當(dāng)使用的代理服務(wù)器不需要密碼驗證時(使用Proxy設(shè)置代理)'作用域:指定的請求URL'

public String getData(String url, Map<String, String> param) throws IOException {
        // 設(shè)置代理
     SocketAddress socketAddress = new InetSocketAddress("代理的ip地址或域名", 代理的端口);
        Proxy proxy = new Proxy(Proxy.Type.HTTP, socketAddress);
        URL proxyUrl = new URL(url);
        proxyUrl.openConnection(proxy);
        // 請勿輕易改變此提交方式,大部分的情況下,提交方式都是表單提交
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        return restTemplate.getForEntity(url, String.class, param).getBody();
}

3.)當(dāng)使用的代理服務(wù)器需要密碼驗證時(使用Proxy設(shè)置代理)作用域:指定的URL

由于代理服務(wù)器需要密碼驗證,所以我們需要使用java.net.Authenticator.Authenticator.setDefault(Authenticator authenticator)來注冊實現(xiàn)密碼驗證

public class AuthenticatorUtil extends Authenticator {
    // 代理服務(wù)器用戶名
    private String user = "";
 //代理服務(wù)器密碼
    private String password = "";
    public MyAuthenticator(String user, String password) {
        this.user = user;
        this.password = password;
    }
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(user, password.toCharArray());
    }
}
public String getData(String url, Map<String, String> param) throws IOException {
     // TODO: 2023/1/5  設(shè)置代理服務(wù)器用戶名和密碼
        Authenticator.setDefault(new AuthenticatorUtil("username", "password"));
        // TODO: 2023/1/5 設(shè)置代理服務(wù)器的ip地址(域名)和端口
     SocketAddress socketAddress = new InetSocketAddress("代理的ip地址或域名", 代理的端口);
        Proxy proxy = new Proxy(Proxy.Type.HTTP, socketAddress);
        URL proxyUrl = new URL(url);
        proxyUrl.openConnection(proxy);
        // 請勿輕易改變此提交方式,大部分的情況下,提交方式都是表單提交
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        return restTemplate.getForEntity(url, String.class, param).getBody();
}

Java在請求某些不受信任的https網(wǎng)站時會報:'PKIX path building failed'

這個問題也是在做開發(fā)的時候遇到的,報錯如下

"I/0 error on PosT reguest for  "https://sfapi-sbox,sf-express.com/std/service ": sunsecurity.validator.ValidatorException: PKIX pathbuilding failed: sun,security,provider.certpathSunCertPathbuilderException: unable to find valid certification path to reguested target; nestedexception is iavax.net.ssl.SSLHandshakeException: sun,security.validator.ValidatorException: PKIX pathbuilding failed: sun,security.provider,certpath,SunCertPathbuilderException: unable to find validcertification-path to requested target"

有些小伙伴看到這個報錯,可能以為是請求不通,其實并不是,而是https://sfapi-sbox,sf-express.com/std/service這個地址不受信任,使用https進(jìn)行請求的話,所以就有了下面的工具類,用程序重新方法,信任所有的SSL證書

package com.vca.common.utils;

import lombok.SneakyThrows;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.net.ssl.*;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

/**
 * @Description:信任所有證書工具類
 * @author:chenbing
 * @date 2023/1/4 17:40
 */
public class SslUtil {
    //創(chuàng)建日志記錄工具
    public static final Logger logger = LoggerFactory.getLogger(SslUtil.class);

    private static void trustAllHttpsCertificates() throws Exception {
        TrustManager[] trustAllCerts = new TrustManager[1];
        TrustManager tm = new miTM();
        trustAllCerts[0] = tm;
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, null);
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    }

    static class miTM implements TrustManager, X509TrustManager {
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public boolean isServerTrusted(X509Certificate[] certs) {
            return true;
        }

        public boolean isClientTrusted(X509Certificate[] certs) {
            return true;
        }

        public void checkServerTrusted(X509Certificate[] certs, String authType)
                throws CertificateException {
            return;
        }

        public void checkClientTrusted(X509Certificate[] certs, String authType)
                throws CertificateException {
            return;
        }
    }

    /**
     * @Description:忽略HTTPS請求的SSL證書,必須在openConnection之前調(diào)用
     * @author:chenbing
     * @date 2023/1/4 18:00
     */
    @SneakyThrows
    public static void ignoreSsl() {
        HostnameVerifier hv = new HostnameVerifier() {
            public boolean verify(String urlHostName, SSLSession session) {
                logger.info("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
                return true;
            }
        };
        trustAllHttpsCertificates();
        HttpsURLConnection.setDefaultHostnameVerifier(hv);
    }
}
public String postFormData(String url, MultiValueMap<String, String> map) {
        HttpHeaders headers = new HttpHeaders();
     //再發(fā)送請求之前調(diào)用ignoreSsl()方法,忽略掉HTTPS請求的SSL證書
        SslUtil.ignoreSsl();
//        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
        HttpEntityString, String>> requests = new HttpEntityString, String>>(map, headers);
        String body = restTemplate.postForEntity(url, requests, String.class).getBody();
        return body;
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2989

    瀏覽量

    109642
  • 開發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    373

    瀏覽量

    41517
  • 工具
    +關(guān)注

    關(guān)注

    4

    文章

    315

    瀏覽量

    28290
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    10個關(guān)于linux中Squid代理服務(wù)器的實用面試問答

    不僅是系統(tǒng)管理員和網(wǎng)絡(luò)管理員時不時會聽到“代理服務(wù)器”這個詞,我們也經(jīng)常聽到。代理服務(wù)器已經(jīng)成為一種企業(yè)常態(tài),而且經(jīng)常會接觸到它。它現(xiàn)在也出現(xiàn)在一些小型的學(xué)?;蛘叽笮涂鐕镜淖灾蛷d里。Squid
    發(fā)表于 09-28 10:19

    linux通過代理服務(wù)器來上網(wǎng)

    有時,某個服務(wù)器無法聯(lián)網(wǎng)。想聯(lián)網(wǎng)的話,可以通過代理服務(wù)器。下載一個ccproxy,安裝完成后,打開該軟件,點擊‘設(shè)置’:
    發(fā)表于 07-24 06:41

    網(wǎng)絡(luò)代理服務(wù)器的磁盤驅(qū)動

     網(wǎng)絡(luò)代理服務(wù)器的磁盤驅(qū)動  網(wǎng)絡(luò)加速產(chǎn)品同臺式機(jī)、服務(wù)器類似,多采用IDE和SCSI硬盤作為介質(zhì)存儲設(shè)備。典型類型
    發(fā)表于 01-07 14:05 ?727次閱讀

    網(wǎng)絡(luò)代理服務(wù)器的內(nèi)存

    網(wǎng)絡(luò)代理服務(wù)器的內(nèi)存              網(wǎng)絡(luò)加速產(chǎn)品多采用SDRAM 和DDR SDRAM兩種內(nèi)存。  &nb
    發(fā)表于 01-07 14:06 ?629次閱讀

    網(wǎng)絡(luò)代理服務(wù)器的網(wǎng)絡(luò)接口

    網(wǎng)絡(luò)代理服務(wù)器的網(wǎng)絡(luò)接口         
    發(fā)表于 01-07 14:08 ?630次閱讀

    網(wǎng)絡(luò)代理服務(wù)器

    網(wǎng)絡(luò)代理服務(wù)器              網(wǎng)絡(luò)代理服務(wù)器有別于傳統(tǒng)的網(wǎng)絡(luò)加速軟件,它是專門指高速緩存服務(wù)器產(chǎn)品,即Cache
    發(fā)表于 01-07 14:09 ?1060次閱讀

    Apache代理服務(wù)器配置說明

    Apache代理服務(wù)器 1. 安裝apache。 2. 修改\Apache\conf\httpd.conf配置文件, 首先要添加代理服務(wù)器模塊。找到下面這幾行: #LoadModule
    發(fā)表于 04-29 16:49 ?0次下載

    vpn代理服務(wù)器_VPN代理軟件下載

    vpn代理服務(wù)器使用,通過vpn代理登錄谷歌電子市場,本文提供了vpn代理軟件下載,供vpn代理使用的朋友下載
    發(fā)表于 09-14 09:50 ?111次下載

    怎樣在樹莓派中設(shè)置代理服務(wù)器

    代理服務(wù)器的主機(jī)名或IP地址和端口
    的頭像 發(fā)表于 09-24 16:59 ?2.6w次閱讀

    基于高斯混合模型的Web代理服務(wù)器緩存

    基于高斯混合模型的Web代理服務(wù)器緩存
    發(fā)表于 06-23 16:46 ?17次下載

    代理服務(wù)器IP如何使用,這幾點需要注意了

    作為信息的中轉(zhuǎn)站,偽裝自己的真實IP,保障上網(wǎng)安全。那么,如何安全且合理的使用代理IP技術(shù)呢? 代理服務(wù)器是介于客戶端和Web服務(wù)器之間的另一臺服務(wù)器,有了它之后,瀏覽
    的頭像 發(fā)表于 07-22 17:19 ?4660次閱讀

    恒訊科技分析:代理服務(wù)器的類型有哪些?

    代理服務(wù)器是一臺攔截和管理兩個設(shè)備、網(wǎng)絡(luò)或協(xié)議之間的流量的計算機(jī)。代理是充當(dāng)我們的計算機(jī)與我們正在使用的網(wǎng)站和互聯(lián)網(wǎng)服務(wù)之間的中介的網(wǎng)關(guān)。它們可以用作防火墻、過濾器、緩存或促進(jìn)共享網(wǎng)絡(luò)連接。這是
    的頭像 發(fā)表于 10-23 15:08 ?571次閱讀
    恒訊科技分析:<b class='flag-5'>代理服務(wù)器</b>的類型有哪些?

    代理服務(wù)器用戶名,主要作用是什么?

    代理服務(wù)器用戶名是指用于訪問和控制代理服務(wù)器的身份驗證信息之一。用戶名通常由代理服務(wù)器的管理員或服務(wù)提供商設(shè)定,用于確保只有授權(quán)用戶能夠訪問和使用
    的頭像 發(fā)表于 09-13 09:48 ?512次閱讀

    使用Python構(gòu)建高效的HTTP代理服務(wù)器

    構(gòu)建一個高效的HTTP代理服務(wù)器在Python中涉及多個方面,包括性能優(yōu)化、并發(fā)處理、協(xié)議支持(HTTP/HTTPS)、錯誤處理以及日志記錄等。
    的頭像 發(fā)表于 10-23 07:41 ?530次閱讀

    Python中代理服務(wù)器的配置與應(yīng)用

    在網(wǎng)絡(luò)通信中,代理服務(wù)器作為一種重要的網(wǎng)絡(luò)中間件,充當(dāng)著客戶端和目標(biāo)服務(wù)器之間的中間人角色。它能夠接收來自客戶端的請求,并將這些請求轉(zhuǎn)發(fā)給目標(biāo)服務(wù)器,然后將服務(wù)器的響應(yīng)返回給客戶端。P
    的頭像 發(fā)表于 11-12 07:13 ?563次閱讀