Класс клиента Java Proxy, который поддерживает аутентификацию
Я ищу прокси-клиент класса java socks, который поддерживает аутентификацию, какие-либо предложения? Java.net.Proxy не поддерживает аутентификацию.
Изменить: я не могу найти способ, который бы прикрепить данные аутентификации к конкретному прокси-хосту через сокет. Authenticator.setDefault() допускает только один набор учетных данных.
Authenticator.setDefault(new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication(){
PasswordAuthentication p=new PasswordAuthentication("xxx", "xxx".toCharArray());
return p;
}
});
Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("xxx.xx.xxx.xxx", xxx));
Socket sock = new Socket(proxy);
sock.connect(new InetSocketAddress(server,xx));
2 ответа
Java поддерживает настройку прокси Socks через зарегистрированный java.net.Authenticator
или с помощью настроек, как описано в свойствах сети:
Настройки поддержки протокола SOCKS
Имя пользователя и пароль SOCKS получаются следующим образом. Во-первых, если приложение зарегистрировало
java.net.Authenticator
экземпляр по умолчанию, тогда это будет запрошено с протоколом, установленным в строку "SOCKS5", а в приглашении будет задана строка "SOCKS аутентификация". Если аутентификатор не возвращает имя пользователя / пароль или аутентификатор не зарегистрирован, то система проверяет пользовательские настройки "java.net.socks.username
" а также "java.net.socks.password
Msgstr "Если эти настройки не существуют, значит системное свойство"user.name
"проверяется на имя пользователя. В этом случае пароль не указывается.SocksProxyHost
socksProxyPort (по умолчанию: 1080)
Указывает имя прокси-сервера SOCKS и номер порта, который будет использоваться уровнем протокола SOCKS. Если указан socksProxyHost, то все сокеты TCP будут использовать прокси-сервер SOCKS для установления или принятия соединения. Прокси-сервер SOCKS может быть сервером SOCKS v4 или v5, и он должен разрешать неаутентифицированные соединения.
Для примеров клиентского кода вы можете проверить этот ответ в Переполнении стека.
РЕДАКТИРОВАТЬ: Обновление ответа в соответствии с комментарием
Побочный эффект поддержки SOCKS в JDK заключается в том, что вся ваша JVM будет проходить через один и тот же прокси-сервер SOCKS. Так что это может не сработать для вас.
Authenticator
влияет на всю аутентификацию в вашей JVM (HTTP-аутентификация, Proxy Auth). Итак, еще раз, это может не сработать для вас.
В вашем случае возможным решением было бы использование HttpClient от HttpComponents (преемника устаревшего клиента Commons HTTP 3.x). Ознакомьтесь с примерами и особенно с запросом через прокси-сервер и примерами проверки подлинности прокси.
Используйте этот HttpClient (не Apache's),
http://www.innovation.ch/java/HTTPClient/
Это просто обработчик URL, поэтому вы можете использовать обычный HTTPUrlConnection. Поддерживает SOCKS и другие прокси.