Csatlakozás proxy szervereken keresztül a Java Java-ban

1. Bemutatkozás

A proxy szerverek közvetítőként működnek az ügyfélalkalmazások és más szerverek között. Vállalati környezetben gyakran használjuk őket, hogy elősegítsük a felhasználók által elfogyasztott tartalom ellenőrzését, általában a hálózat határain túl.

Ebben az oktatóanyagban megnézzük hogyan lehet csatlakozni a Java proxy szerverein keresztül.

Először feltárjuk a régebbi, globálisabb megközelítést, amely JVM-szintű és a rendszer tulajdonságokkal van konfigurálva. Utána bemutatjuk a Meghatalmazott osztály, amely nagyobb kontrollt biztosít számunkra azáltal, hogy lehetővé teszi a konfigurációt kapcsolatonként.

2. Beállítás

Az ebben a cikkben szereplő minták futtatásához hozzáférésre van szükségünk egy proxykiszolgálóhoz. A Squid egy népszerű megvalósítás, amely a legtöbb operációs rendszer számára elérhető. A Squid alapértelmezett konfigurációja elég jó lesz a legtöbb példánkhoz.

3. Globális beállítás használata

A Java egy sor olyan rendszer tulajdonságot tár fel, amelyek felhasználhatók a JVM-szintű viselkedés konfigurálásához. Ezt az „egy méretet alkalmazó megközelítést” gyakran a legegyszerűbb megvalósítani, ha ez megfelel a felhasználási esetnek.

Tudunk állítsa be a szükséges tulajdonságokat a parancssorból a JVM meghívásakor. Alternatívaként azt is megtehetjük hívással állítsa be őket System.setProperty () futás közben.

3.1. Rendelkezésre álló tulajdonságok

A Java proxy kezelőket biztosít a HTTP, HTTPS, FTP és SOCKS protokollokhoz. Minden kezelőhöz egy proxy definiálható hosztnévként és portszámként:

  • http.proxyHost - A HTTP proxykiszolgáló hosztneve
  • http.proxyPort - A HTTP proxy szerver portszáma - tulajdonság nem kötelező és alapértelmezés szerint 80, ha nincs megadva
  • http.nonProxyHosts - Azokkal a gazdagép-mintákkal („|”) elválasztva, amelyeknél meg kell kerülni a proxyt - mind a HTTP, mind a HTTPS kezelőkre vonatkozik, ha be van állítva
  • zokniProxyHost- A SOCKS proxy szerver hosztneve
  • zokniProxyPort- A SOCKS proxy szerver portszáma

Ha meghatározza nonProxyHosts, a gazdagép-minták helyettesítő karakterrel kezdődhetnek vagy végződhetnek (“*”). Szükség lehet a „|” határoló a Windows platformokon. Az összes elérhető proxyval kapcsolatos rendszer tulajdonságok teljes listája megtalálható az Oracle hivatalos hálózati dokumentációjában a hálózati tulajdonságokról.

3.2. Beállítás parancssori argumentumokkal

Meghatározhatjuk a proxykat a parancssorban, ha a beállításokat rendszer tulajdonságokként adjuk meg:

java -Dhttp.proxyHost = 127.0.0.1 -Dhttp.proxyPort = 3128 com.baeldung.networking.proxies.CommandLineProxyDemo

A folyamat ilyen indításakor egyszerűen használhatjuk openConnection () a URL további munka nélkül:

URL url = új URL (RESOURCE_URL); URLConnection con = url.openConnection ();

3.3. A Használat beállítása System.setProperty (karakterlánc, karakterlánc)

Ha nem tudjuk beállítani a proxy tulajdonságait a parancssorban, beállíthatjuk őket a következő hívásokkal: System.setProperty () programunkon belül:

System.setProperty ("http.proxyHost", "127.0.0.1"); System.setProperty ("http.proxyPort", "3128"); URL url = új URL (RESOURCE_URL); URLConnection con = url.openConnection (); // ...

Ha később manuálisan állítjuk be a vonatkozó rendszer tulajdonságokat, akkor a proxyt már nem használjuk:

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

3.4. A globális konfiguráció korlátai

Noha a globális konfiguráció használata a rendszer tulajdonságokkal könnyen megvalósítható, ez a megközelítés korlátozza, hogy mit tehetünk, mert a beállítások az egész JVM-re érvényesek. Emiatt az adott protokollhoz meghatározott beállítások a JVM élettartama alatt vagy addig, amíg nincsenek beállítva, aktívak.

Ennek a korlátozásnak a kikerülése érdekében csábító lehet a beállítások be- és kikapcsolása, ha szükséges. Ahhoz, hogy ezt egy több szálból álló programban biztonságosan lehessen végrehajtani, szükség lenne olyan intézkedések bevezetésére, amelyek védelmet nyújtanak az egyidejűségi problémák ellen.

Alternatívaként, a Proxy API részletesebb ellenőrzést biztosít a proxy konfiguráció felett.

4. A Meghatalmazott API

A Meghatalmazott osztály rugalmas módszert kínál a proxyk kapcsolatonkénti konfigurálására. Ha léteznek JVM-szintű proxy-beállítások, akkor a kapcsolaton alapuló proxy-beállításokat használja a Meghatalmazott osztály felülírja őket.

Háromféle proxy létezik, amelyekkel meghatározhatjuk Proxy.Típus:

  • HTTP - a HTTP protokollt használó proxy
  • ZOKNI - a SOCKS protokollt használó proxy
  • KÖZVETLEN - kifejezetten konfigurált közvetlen kapcsolat proxy nélkül

4.1. HTTP-proxy használata

A HTTP-proxy használatához először meg kell tennünk betakar a SocketAddress például egy Meghatalmazott és típusa Proxy.Type.HTTP. Ezután egyszerűen elhaladunk a Meghatalmazott példány a URLConnection.openConnection ():

URL weburl = új URL (URL_STRING); Proxy webProxy = új Proxy (Proxy.Type.HTTP, új InetSocketAddress ("127.0.0.1", 3128)); HttpURLConnection webProxyConnection = (HttpURLConnection) weburl.openConnection (webProxy);

Egyszerűen fogalmazva, ez azt jelenti, hogy csatlakozni fogunk URL_STRING, de ezután a kapcsolatot a (z) címen tárolt proxy szerveren keresztül irányítsa 127.0.0.1:3128.

4.2. DIRECT Proxy használata

Előfordulhat, hogy közvetlenül kapcsolódnunk kell egy gazdagéphez. Ebben az esetben kifejezetten megtehetjük megkerülheti a statikus használatával globálisan konfigurálható proxyt Proxy.NO_PROXY példa. A takaró alatt az API egy új példányt készít Meghatalmazott nekünk, felhasználva Proxy.Type.DIRECT mint a típus:

HttpURLConnection directConnection = (HttpURLConnection) weburl.openConnection (Proxy.NO_PROXY);

Alapvetően, ha nincs globálisan konfigurált proxy, akkor ez megegyezik a hívással openConnection () érvek nélkül.

4.3. SOCKS Proxy használata

A SOCKS proxy használata hasonló a HTTP variánshoz, amikor vele dolgozik URLConnection. Kezdjük csomagolás a SocketAddress például egy Meghatalmazott egyfajta Proxy.Type.SOCKS. Utána elhaladunk a Meghatalmazott példány a URLConnection.openConnection:

Proxy socksProxy = új Proxy (Proxy.Type.SOCKS, új InetSocketAddress ("127.0.0.1", 1080)); HttpURLConnection socksConnection = (HttpURLConnection) weburl.openConnection (socksProxy); 

Az is lehetséges használjon SOCKS proxyt, amikor TCP aljzathoz csatlakozik. Először a Meghatalmazott például a Foglalat. Utána mi adja át a célt SocketAddress példány a Socket.connect ():

Socket proxySocket = új Socket (socksProxy); InetSocketAddress socketHost = új InetSocketAddress (SOCKET_SERVER_HOST, SOCKET_SERVER_PORT); proxySocket.connect (socketHost);

5. Következtetés

Ebben a cikkben megvizsgáltuk, hogyan kell működni a proxy szerverekkel a Java Java-ban.

Először azt a régebbi, globálisabb stílust néztük meg, amikor a proxykiszolgálókon keresztül kapcsolódunk a rendszer tulajdonságaihoz. Aztán láttuk, hogyan kell használni a Meghatalmazott osztály, amely apró vezérlést biztosít a proxy szervereken keresztül történő csatlakozáskor.

Mint mindig, a cikkben használt összes forráskód megtalálható a GitHubon.


$config[zx-auto] not found$config[zx-overlay] not found