Класс клиента Java Proxy, который поддерживает аутентификацию - PullRequest
5 голосов
/ 09 октября 2009

Я ищу прокси-клиент класса java socks, который поддерживает аутентификацию, какие-либо предложения? Java.net.Proxy не поддерживает аутентификацию.

Edit: Я не могу найти способ присоединить данные аутентификации к конкретному прокси-серверу через сокет. 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 ]

4 голосов
/ 09 октября 2009

Java поддерживает настройку прокси-сервера Socks через зарегистрированный java.net.Authenticator или через настройки, как описано в Сетевые свойства :

Настройки поддержки протокола SOCKS

Имя пользователя и пароль SOCKS приобрел следующим образом. Первый, если приложение зарегистрировало java.net.Authenticator по умолчанию экземпляр, то это будет запрошено с протоколом, установленным в строку «SOCKS5», и подсказка установлена ​​в строка "SOCKS аутентификация". Если аутентификатор не возвращает имя пользователя / пароль или если нет аутентификатор зарегистрирован, то система проверяет пользовательские настройки "java.net.socks.username" и "java.net.socks.password". Если эти предпочтения не существуют, то системное свойство "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 Client 3.x ). Посмотрите примеров и особенно запрос через прокси и Проверка подлинности прокси примеры.

0 голосов
/ 09 октября 2009

Используйте этот HttpClient (не Apache's),

http://www.innovation.ch/java/HTTPClient/

Это просто обработчик URL, поэтому вы можете использовать обычный HTTPUrlConnection. Поддерживает SOCKS и другие прокси.

...