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.