Как я могу настроить HTTPClient для аутентификации против прокси SOCKS?

вот то, как я начал бы делать это. Жестокий, да, но это - единственная вещь, которая, как гарантируют, полностью проигнорирует коллизии , и сохраняют историю изменений в целости.

  cd /scratchdir 
  svn co -r good svn://repository
  cd /hosed_project
  svn up -r HEAD
  cat >> /tmp/cp.sh 
  ORIG=$1
  TARG=$( echo $ORIG | sed 's/\/scratchdir\///' ); 
  cp $ORIG /hosed_project/$TARG;
  ^D
  chmod u+x /tmp/cp.sh
  find /scratchdir -not -wholename "*/.svn*" -exec /tmp/cp.sh {} \;

Примечание, это не "нормальный" путь IMO, нормальный путь состоит в том, чтобы создать ответвление из старой версии, и затем объединиться, то ответвление въезжают задним ходом голове. (по крайней мере, это - то, как Это использовало для работы)

Редактирование: вышеупомянутый код не тестируется, НЕ выполняйте его verbatim

5
задан skaffman 18 May 2012 в 16:08
поделиться

5 ответов

На странице функций Apache HTTPClient говорится:

Прозрачные соединения через прокси-серверы SOCKS (версии 4 и 5) с использованием встроенной поддержки сокетов Java.

С "прозрачным" ", Я полагаю, они имеют в виду, что он работает без каких-либо дополнительных действий. Есть ли у вас где-нибудь прокси SOCKS? Разве ты не можешь просто попробовать, чтобы убедиться, что это работает?

4
ответ дан 18 December 2019 в 09:08
поделиться

Java поддерживает конфигурацию прокси-сервера Socks с помощью параметров:

  • socksProxyHost для имени хоста прокси-сервера SOCKS
  • socksProxyPort для номера порта, значение по умолчанию - 1080

например

java -DsocksProxyHost=socks.mydomain.com

( редактировать ) В вашем примере, если прокси-сервер socks был настроен описанным выше способом:

httpclient.getHostConfiguration().setProxy("proxyserver.example.com", 8080);
Credentials cred = new UsernamePasswordCredentials("username","password");
httpclient.getState().setProxyCredentials(AuthScope.ANY, cred); 

Вы также можете использовать этот вариант (без httpclient):

SocketAddress addr = new
InetSocketAddress("webcache.mydomain.com", 8080);
Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr); // Type.HTTP for HTTP

Завершая предыдущий пример, теперь мы можем добавить:

URL url = new URL("http://java.sun.com/");
URConnection conn = url.openConnection(proxy);

HTH

6
ответ дан 18 December 2019 в 09:08
поделиться

SOCKS изначально не поддерживается HttpClient 3. Вы можете попробовать поддержку SOCKS в JDK, как было предложено другими. Побочным эффектом является то, что вся ваша JVM будет проходить через один и тот же прокси-сервер SOCKS.

Java 5 поддерживает аутентификацию по имени пользователя и паролю в SOCKS (тип 2). Все, что вам нужно сделать, это настроить аутентификатор следующим образом

Authenticator.setDefault(new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password.toCharArray());
    }
});

. Опять же, это может не сработать для вас, потому что это влияет на всю аутентификацию в вашей JVM (HTTP-аутентификация, Proxy Auth).

4
ответ дан 18 December 2019 в 09:08
поделиться

You can provide a custom socket factory which implements the SOCKS protocol, and register it as your default HTTP protocol handler. This solution has a limitation similar to tuergeist's answer above has - it applies globally, to any HTTP connection you'll establish through HttpClient.

If you find this a problem, take a look at this correspondence, where Oleg suggests using HttpClient 4.0, but also refers to a possible patch in HostConfiguration class for HttpClient 3.x.

Another possible solution, which is my personal favorite, is to write a wrapper HTTP proxy to the socks proxy.

3
ответ дан 18 December 2019 в 09:08
поделиться

Я попробовал

System.setProperty("socksProxyHost", "socks.xyz.com");
System.setProperty("socksProxyPort", "1000");

и он работает нормально.

1
ответ дан 18 December 2019 в 09:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: