Zum Inhalt springen
Guides 6 Min. Lesezeit 762 Aufrufe

Java Proxy-Einrichtung

Meistern Sie die Java-Proxy-Konfiguration für Web-Scraping und Automatisierung. Dieser Leitfaden behandelt die Einrichtung von Proxys für HttpClient-, Jsoup- und Selenium-Anwendungen.

Java Proxy-Einrichtung

Das Einrichten von Proxys für Java-Anwendungen, die HttpClient, Jsoup und Selenium verwenden, beinhaltet die Konfiguration von Proxy-Host und -Port entweder global über Java-Systemeigenschaften oder spezifisch für die Verbindungsobjekte jeder Bibliothek, oft einschließlich Vorkehrungen für die Authentifizierung.

Proxy-Grundlagen in Java

Proxy-Server fungieren als Vermittler für Netzwerkanfragen und bieten Vorteile wie verbesserte Sicherheit, Anonymität und Zugriff auf geografisch eingeschränkte Inhalte. In Java können Proxy-Konfigurationen entweder breit über die Java Virtual Machine (JVM) angewendet oder spezifisch für einzelne HTTP-Clients vorgenommen werden.

Proxy-Typen

  • HTTP-Proxy: Verarbeitet HTTP-Anfragen (http://).
  • HTTPS-Proxy: Verarbeitet HTTPS-Anfragen (https://). Oft kann ein HTTP-Proxy auch HTTPS-Anfragen über die CONNECT-Methode verarbeiten.
  • SOCKS-Proxy: Unterstützt verschiedene Netzwerkprotokolle, nicht nur HTTP/HTTPS. Bietet mehr Flexibilität und kann TCP- und UDP-Verkehr verarbeiten.

Proxy-Authentifizierung

Viele Proxys erfordern eine Authentifizierung (Benutzername/Passwort). Dies kann je nachdem, ob der Proxy global oder pro Client konfiguriert ist, unterschiedlich gehandhabt werden.

Globale Proxy-Einrichtung (Java-Systemeigenschaften)

Java bietet Systemeigenschaften zur Konfiguration von Proxys, die für alle java.net-Verbindungen gelten, einschließlich derer, die von HttpURLConnection (das Jsoup intern verwendet) und anderen Bibliotheken, die standardmäßig diese Systemeinstellungen nutzen, hergestellt werden.

// Set HTTP proxy
System.setProperty("http.proxyHost", "proxy.example.com");
System.setProperty("http.proxyPort", "8080");

// Set HTTPS proxy (can be the same as HTTP or different)
System.setProperty("https.proxyHost", "proxy.example.com");
System.setProperty("https.proxyPort", "8080");

// Set SOCKS proxy
System.setProperty("socksProxyHost", "socks.example.com");
System.setProperty("socksProxyPort", "1080");

// Exclude hosts from proxying (comma-separated list, wildcards allowed)
System.setProperty("http.nonProxyHosts", "localhost|127.0.0.1|*.local");

Diese Eigenschaften können auch als JVM-Argumente übergeben werden:
java -Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=8080 YourApplication

Globale Proxy-Authentifizierung

Für Proxys, die eine Authentifizierung erfordern, kann Javas Authenticator-Klasse verwendet werden. Dies richtet einen Standard-Authenticator für alle java.net-Verbindungen ein.

import java.net.Authenticator;
import java.net.PasswordAuthentication;

public class GlobalProxyAuthenticator {

    public static void setup(String username, String password) {
        Authenticator.setDefault(new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                // Check if the request is for a proxy
                if (getRequestorType() == RequestorType.PROXY) {
                    return new PasswordAuthentication(username, password.toCharArray());
                }
                return null; // No authentication for other requests
            }
        });
    }

    public static void main(String[] args) {
        // Set global proxy properties
        System.setProperty("http.proxyHost", "authenticated-proxy.example.com");
        System.setProperty("http.proxyPort", "8080");
        System.setProperty("https.proxyHost", "authenticated-proxy.example.com");
        System.setProperty("https.proxyPort", "8080");

        // Set up authenticator
        GlobalProxyAuthenticator.setup("proxyuser", "proxypass");

        // Now, any HttpURLConnection-based request will attempt to use this proxy and credentials
        // Example: Jsoup will implicitly use this.
        try {
            org.jsoup.Connection.Response response = org.jsoup.Jsoup.connect("http://httpbin.org/get")
                    .ignoreContentType(true)
                    .execute();
            System.out.println("Status: " + response.statusCode());
            System.out.println("Body: " + response.body());
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }
    }
}

Apache HttpClient

Apache HttpClient bietet robuste, flexible Methoden für HTTP-Anfragen und wird häufig für komplexe Integrationen verwendet. Es unterstützt die explizite Proxy-Konfiguration pro Client-Instanz.

HttpClient 4.x

import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpClient4ProxySetup {

    public static void main(String[] args) throws Exception {
        // 1. Define Proxy Host
        HttpHost proxy = new HttpHost("proxy.example.com", 8080, "http"); // or "https" or "socks"

        // 2. Configure Request with Proxy
        RequestConfig config = RequestConfig.custom()
                .setProxy(proxy)
                .build();

        // 3. (Optional) For Authenticated Proxy: Credentials Provider
        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(
                new AuthScope(proxy.getHostName(), proxy.getPort()),
                new UsernamePasswordCredentials("proxyuser", "proxypass"));

        // 4. Build HttpClient
        CloseableHttpClient httpClient = HttpClients.custom()
                .setDefaultRequestConfig(config)
                .setDefaultCredentialsProvider(credentialsProvider) // For authenticated proxies
                .build();

        // 5. Execute Request
        HttpGet request = new HttpGet("http://httpbin.org/get");
        request.setConfig(config); // Ensure request uses the config

        try (CloseableHttpResponse response = httpClient.execute(request)) {
            System.out.println("Status: " + response.getStatusLine());
            System.out.println("Body: " + EntityUtils.toString(response.getEntity()));
        } finally {
            httpClient.close();
        }
    }
}

HttpClient 5.x

import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.ClassicHttpResponse;

public class HttpClient5ProxySetup {

    public static void main(String[] args) throws Exception {
        // 1. Define Proxy Host
        HttpHost proxy = new HttpHost("http", "proxy.example.com", 8080); // Scheme, Host, Port

        // 2. (Optional) For Authenticated Proxy: Credentials Provider
        BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(
                new AuthScope(proxy.getHostName(), proxy.getPort()),
                new UsernamePasswordCredentials("proxyuser", "proxypass".toCharArray()));

        // 3. Build HttpClient
        CloseableHttpClient httpClient = HttpClients.custom()
                .setProxy(proxy) // Set proxy directly on the client builder
                .setDefaultCredentialsProvider(credentialsProvider) // For authenticated proxies
                .build();

        // 4. Execute Request
        HttpGet request = new HttpGet("http://httpbin.org/get");

        // RequestConfig can still be used for per-request overrides if needed
        RequestConfig requestConfig = RequestConfig.custom()
                // .setProxy(proxy) // Can also be set here for per-request proxy
                .build();
        request.setConfig(requestConfig);

        try (CloseableHttpClient client = httpClient) {
            client.execute(request, response -> {
                System.out.println("Status: " + response.getCode());
                System.out.println("Body: " + EntityUtils.toString(response.getEntity()));
                return null;
            });
        }
    }
}

Jsoup

Jsoup ist eine Java-Bibliothek für die Arbeit mit realem HTML. Sie bietet eine einfache API zum Abrufen von URLs und zum Parsen von HTML. Jsoup's Connection-Schnittstelle ermöglicht die direkte Proxy-Konfiguration.

import org.jsoup.Jsoup;
import org.jsoup.Connection;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;

public class JsoupProxySetup {

    public static void main(String[] args) {
        String url = "http://httpbin.org/get";
        String proxyHost = "proxy.example.com";
        int proxyPort = 8080;

        try {
            // Method 1: Using proxy(host, port)
            Connection.Response response1 = Jsoup.connect(url)
                    .proxy(proxyHost, proxyPort)
                    .ignoreContentType(true)
                    .execute();
            System.out.println("Jsoup (Method 1) Status: " + response1.statusCode());
            System.out.println("Jsoup (Method 1) Body: " + response1.body().substring(0, 100) + "...\n");

            // Method 2: Using java.net.Proxy object
            Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
            Connection.Response response2 = Jsoup.connect(url)
                    .proxy(proxy)
                    .ignoreContentType(true)
                    .execute();
            System.out.println("Jsoup (Method 2) Status: " + response2.statusCode());
            System.out.println("Jsoup (Method 2) Body: " + response2.body().substring(0, 100) + "...\n");

        } catch (IOException e) {
            System.err.println("Error connecting via Jsoup proxy: " + e.getMessage());
            e.printStackTrace();
        }

        // For authenticated proxies, Jsoup relies on global Java system properties and Authenticator.
        // See "Global Proxy Setup" section for details.
    }
}

Für authentifizierte Proxys mit Jsoup ist der empfohlene Ansatz, die globalen Java-Systemeigenschaften und java.net.Authenticator wie im Abschnitt "Globale Proxy-Einrichtung" gezeigt zu konfigurieren. Jsoup's interne HttpURLConnection wird diese Einstellungen dann übernehmen.

Selenium WebDriver

Selenium automatisiert Webbrowser. Die Proxy-Konfiguration für Selenium WebDriver erfolgt typischerweise über browserspezifische Optionen.

Chrome WebDriver

import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class SeleniumChromeProxySetup {

    public static void main(String[] args) {
        // Set path to ChromeDriver executable
        // System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");

        String proxyHost = "proxy.example.com";
        int proxyPort = 8080;
        String proxyAddress = proxyHost + ":" + proxyPort;

        Proxy proxy = new Proxy();
        proxy.setHttpProxy(proxyAddress); // For HTTP traffic
        proxy.setSslProxy(proxyAddress);  // For HTTPS traffic (often same as HTTP)
        proxy.setSocksProxy(proxyAddress); // For SOCKS traffic
        // proxy.setSocksUsername("socksuser"); // For SOCKS5 authentication
        // proxy.setSocksPassword("sockspass");

        ChromeOptions options = new ChromeOptions();
        options.setCapability("proxy", proxy);
        // options.addArguments("--proxy-server=" + proxyAddress); // Alternative for simple HTTP/HTTPS proxy

        WebDriver driver = new ChromeDriver(options);

        try {
            driver.get("http://httpbin.org/get");
            System.out.println("Page title: " + driver.getTitle());
            // Further interactions with the page...
        } finally {
            driver.quit();
        }
    }
}

Firefox WebDriver

import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;

public class SeleniumFirefoxProxySetup {

    public static void main(String[] args) {
        // Set path to GeckoDriver executable
        // System.setProperty("webdriver.gecko.driver", "/path/to/geckodriver");

        String proxyHost = "proxy.example.com";
        int proxyPort = 8080;
        String proxyAddress = proxyHost + ":" + proxyPort;

        Proxy proxy = new Proxy();
        proxy.setHttpProxy(proxyAddress);
        proxy.setSslProxy(proxyAddress);
        proxy.setSocksProxy(proxyAddress);
        // proxy.setSocksUsername("socksuser");
        // proxy.setSocksPassword("sockspass");

        FirefoxOptions options = new FirefoxOptions();
        options.setCapability("proxy", proxy);

        WebDriver driver = new FirefoxDriver(options);

        try {
            driver.get("http://httpbin.org/get");
            System.out.println("Page title: " + driver.getTitle());
        } finally {
            driver.quit();
        }
    }
}

Selenium Proxy-Authentifizierung

Selenium WebDriver selbst handhabt die Proxy-Authentifizierung (Benutzername/Passwort für HTTP/HTTPS-Proxys) nicht direkt. Gängige Ansätze umfassen:

  • Browser-Erweiterungen: Verwenden Sie eine Browser-Erweiterung, die die Proxy-Authentifizierung handhabt. Diese Erweiterungen können über ChromeOptions oder FirefoxOptions geladen werden.
  • Proxy in URL: Bei einigen HTTP-Proxys können Anmeldeinformationen in die Proxy-URL eingebettet werden (z.B. user:[email protected]:8080), dies wird jedoch nicht universell unterstützt oder ist sicher.
  • SOCKS5-Authentifizierung: Selenius Proxy-Klasse unterstützt setSocksUsername() und setSocksPassword() für SOCKS5-Proxys.
  • Upstream-Proxy-Server: Leiten Sie den Verkehr über einen anderen lokalen Proxy-Server (z.B. BrowserMob Proxy), der die Authentifizierung mit dem Ziel-Proxy verwaltet.

Vergleich der Proxy-Einrichtungsmethoden

Merkmal Java-Systemeigenschaften (-D) Apache HttpClient (4.x/5.x) Jsoup (.proxy()) Selenium WebDriver (Proxy-Klasse)
Geltungsbereich Global (JVM-weit) Pro HttpClient-Instanz Pro Connection-Instanz Pro WebDriver-Instanz
Authentifizierung java.net.Authenticator (global) CredentialsProvider (pro Client) java.net.Authenticator (falls global) SOCKS5 (setSocksUsername/Password); HTTP/HTTPS typischerweise über Erweiterungen/externe Tools
Flexibilität Gering (betrifft alle java.net-Verbindungen) Hoch (feingranulare Kontrolle, Pro-Anfrage-Konfiguration) Moderat (pro Verbindung, aber auf globale Auth angewiesen) Hoch (browserspezifische Optionen, SOCKS-Auth)
Benutzerfreundlichkeit Hoch (einfache Eigenschaften) Moderat bis Hoch (erfordert mehr Code) Hoch (einfache Methodenaufrufe) Moderat (erfordert Erstellung von Proxy-Objekt und Setzen von Optionen)
Unterstützte Protokolle HTTP, HTTPS, SOCKS HTTP, HTTPS, SOCKS HTTP, HTTPS (über HttpURLConnection) HTTP, HTTPS, SOCKS (Browser-Fähigkeiten)
Anwendungsfälle Einfache, konsistente Proxy-Anforderungen in der App Komplexe HTTP-Interaktionen, API-Clients Web-Scraping, einfaches Abrufen von Seiten Browser-Automatisierung, Tests, Web-Scraping
Aktualisiert: 03.03.2026
Zurück zur Kategorie

Lesen Sie auch

Guides 2 Min.

Proxy für Nike SNKRS: Limitierte Drops ergattern & mehrere Teilnahmen sichern

Nutze Residential- oder Mobile-Proxies für Nike SNKRS, um mit mehreren Accounts an Draws teilzunehmen, IP-Limits zu umgehen und limitierte Drops ohne Bans zu coppen. Welcher Typ zu wählen ist und wie man das Setup einrichtet.

Guides 2 Min.

So richten Sie einen Proxy auf dem iPhone ein (WLAN & SOCKS5)

Richten Sie einen Proxy auf dem iPhone über die nativen Wi-Fi-Einstellungen (HTTP/HTTPS) oder eine Proxy-App wie Shadowrocket für SOCKS5 und Mobilfunkabdeckung ein. Schritt-für-Schritt-iOS-Setup und die zu beachtenden Einschränkungen.

Guides 3 Min.

Proxy für Tinder: Mehrere Accounts & Sperren vermeiden

Nutze Mobile- oder Residential-Proxies für Tinder, um mehrere Profile zu betreiben und IP-Shadowbans zu vermeiden. Warum Mobile gewinnt, wie man es einrichtet und warum ein Proxy allein nicht deinen Standort ändert.

Guides 2 Min.

Proxy für StockX: Preise überwachen & Accounts verwalten

Nutzen Sie Residential-, ISP- oder Mobile-Proxys für StockX, um Preise zu überwachen, mehrere Accounts zu verwalten und Drops ohne Bans zu coppen. Hier erfahren Sie, welchen Typ Sie wählen sollten und wie Sie GProxy einrichten.

Guides 3 Min.

Proxy für OpenAI API: Zugriff, Rate Limits & Setup

Leite die OpenAI API über einen Residential- oder ISP-Proxy (GProxy +) weiter, um auf unterstützte Regionen zuzugreifen, 429-Rate-Limits zu umgehen und Accounts zu isolieren. Welcher Proxy zu verwenden ist, plus Python-Setup-Beispiele.

Guides 1 Min.

Einrichten eines Proxys in Cypress für E2E-Tests

Einrichten eines Proxys in Cypress: HTTP_PROXY-Variablen, cy-proxy-middleware und das Testen standortabhängiger Inhalte.

Testen Sie unsere Proxys

20.000+ Proxys in über 100 Ländern weltweit

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.