Перейти к содержимому

Подключение из Java ​

Пример отправляет запрос через выделенную статическую точку подключения. Данные берутся из окружения процесса; по умолчанию HTTP-прокси используется для HTTPS-адреса. Получения и ротации IP нет.

Подготовка ​

Задайте PROXY_HOST, PROXY_PORT, PROXY_USERNAME, PROXY_PASSWORD в терминале, контейнере или среде развёртывания программы. Используйте актуальные данные панели и порт выбранного протокола. Не помещайте реальные пароли в репозиторий, журналы или клиентский код.

Среда и зависимости ​

Используйте JDK 11+ и добавьте зависимость в Maven-проект. Сохраните код как src/main/java/ProxyExample.java и запустите main из IDE или через плагин Maven Exec. Пример использует HTTP-порт с аутентификацией; HTTPS идёт через CONNECT.

xml
<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
  <version>4.12.0</version>
</dependency>

Настройка подключения ​

java
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.time.Duration;
import okhttp3.Credentials;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public final class ProxyExample {
    private static String required(String name) {
        String value = System.getenv(name);
        if (value == null || value.isBlank()) {
            throw new IllegalArgumentException("Missing environment variable: " + name);
        }
        return value;
    }

    public static void main(String[] args) {
        String host = required("PROXY_HOST").replace("[", "").replace("]", "");
        int port = Integer.parseInt(required("PROXY_PORT"));
        String credential = Credentials.basic(required("PROXY_USERNAME"), required("PROXY_PASSWORD"));
        OkHttpClient client = new OkHttpClient.Builder()
            .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port)))
            .proxyAuthenticator((route, response) -> {
                if (response.request().header("Proxy-Authorization") != null) return null;
                return response.request().newBuilder()
                    .header("Proxy-Authorization", credential).build();
            })
            .connectTimeout(Duration.ofSeconds(10))
            .readTimeout(Duration.ofSeconds(30))
            .callTimeout(Duration.ofSeconds(40))
            .build();
        Request request = new Request.Builder().url("https://ip123.in/ip.json").build();
        try (Response response = client.newCall(request).execute()) {
            if (!response.isSuccessful()) {
                System.err.println("HTTP status: " + response.code());
                System.exit(1);
            }
            if (response.body() != null) System.out.println(response.body().string());
        } catch (java.io.IOException error) {
            System.err.println("Proxy request failed; check network and credentials");
            System.exit(1);
        }
    }
}

Этот пример предназначен для HTTP-прокси. Для SOCKS5 с именем и паролем нужна реализация с явной поддержкой такой аутентификации. Замена Proxy.Type.HTTP на SOCKS не переносит HTTP-аутентификатор.

Если подключение не работает ​

Если пример работает, а приложение нет, проверьте процесс, реально выполняющий запрос, настройки SDK, тайм-ауты и повторы. Не отключайте проверку TLS-сертификатов. Пример не выводит ошибки с данными доступа; диагностические журналы тоже нужно очищать. См. FAQ.