wake-up-neo.net

Wie man einen HTTP-Proxy in Java verwendet

Ich schreibe einen Code, der eine Verbindung zu Websites herstellt und den Code überprüft, beispielsweise einen Crawler. Ich muss jedoch über einen Proxy eine Verbindung herstellen und die IP-Adresse ändern (damit die Client-IP nicht in den Serverprotokollen angezeigt wird). 

Wie kann das mit Java gemacht werden? 

22
Tim

Sie können die Java-Systemeigenschaften verwenden, um einen Proxy einzurichten oder als Befehlszeilenoptionen zu übergeben. 

Details und Beispiele finden Sie hier .

Bsp: Vor dem Öffnen der Verbindung

System.setProperty("http.proxyHost", "myProxyServer.com");
System.setProperty("http.proxyPort", "80");

Oder Sie können die im System konfigurierten Standard-Netzwerk-Proxys verwenden

System.setProperty("Java.net.useSystemProxies", "true");

Seit Java 1.5 können Sie eine Proxy-Instanz erstellen und an die openConnection()-Methode übergeben.

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("123.0.0.1", 8080));
URL url = new URL("http://www.yahoo.com");
HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy);
uc.connect();

Oder wie lisak vorgeschlagen, können Sie einige Bibliotheken von Drittanbietern verwenden, die Ihren Bedarf besser unterstützen.

46
Arun P Johny

Oder Sie können auch HttpClient verwenden, was Ihren Anforderungen besser entspricht. Schauen Sie sich die Dokumentation an, sie ist kurz und sehr informativ.

DefaultHttpClient httpclient = new DefaultHttpClient();

HttpHost proxy = new HttpHost("someproxy", 8080);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
10
lisak
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("123.0.0.1", 8080));
URL url = new URL("http://www.yahoo.com");
HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy);
uc.connect();

Das hat bei mir funktioniert. Ich konnte den Proxy für die spezifische Verbindung oder Übertragung verwenden. Früher haben wir System.setProperty verwendet, mit dem es auf Systemebene festgelegt wurde, und alle internen/externen Anforderungen wurden mit demselben Proxy gestartet.

Proxy.Type.HTTP funktioniert auch für http und https 

0
Shashank