Клиентский класс Прокси Java, который поддерживает аутентификацию

Это довольно мелкий, 371 каталог со средним числом 10 файлов в каждом каталоге. некоторые каталоги содержат другие суб-каталоги

Это просто комментарий, но ваши цифры действительно довольно высоки. Я запустил приведенное ниже, используя, по сути, тот же рекурсивный метод, который вы используете, и мое время намного меньше, несмотря на создание вывода строки.

    public void RecurseTest(DirectoryInfo dirInfo, 
                            StringBuilder sb, 
                            int depth)
    {
        _dirCounter++;
        if (depth > _maxDepth)
            _maxDepth = depth;

        var array = dirInfo.GetFileSystemInfos();
        foreach (var item in array)
        {
            sb.Append(item.FullName);
            if (item is DirectoryInfo)
            {
                sb.Append(" (D)");
                sb.AppendLine();

                RecurseTest(item as DirectoryInfo, sb, depth+1);
            }
            else
            { _fileCounter++; }

            sb.AppendLine();
        }
    }

Я запустил приведенный выше код для ряда различных каталогов. На моей машине второй вызов для сканирования дерева каталогов обычно выполнялся быстрее из-за кэширования как во время выполнения, так и в файловой системе. Обратите внимание, что эта система не является чем-то особенным, это всего лишь 1-летняя рабочая станция для разработки.

// cached call
Dirs = 150, files = 420, max depth = 5
Time taken = 53 milliseconds

// cached call
Dirs = 1117, files = 9076, max depth = 11
Time taken = 433 milliseconds

// first call
Dirs = 1052, files = 5903, max depth = 12
Time taken = 11921 milliseconds

// first call
Dirs = 793, files = 10748, max depth = 10
Time taken = 5433 milliseconds (2nd run 363 milliseconds)

Обеспокоенный тем, что я не получил дату создания и изменения, код был изменен, чтобы вывести это также в следующие моменты времени.

// now grabbing last update and creation time.
Dirs = 150, files = 420, max depth = 5
Time taken = 103 milliseconds (2nd run 93 milliseconds)

Dirs = 1117, files = 9076, max depth = 11
Time taken = 992 milliseconds (2nd run 984 milliseconds)

Dirs = 793, files = 10748, max depth = 10
Time taken = 1382 milliseconds (2nd run 735 milliseconds)

Dirs = 1052, files = 5903, max depth = 12
Time taken = 936 milliseconds (2nd run 595 milliseconds)

Примечание. Класс System.Diagnostics.StopWatch используется для синхронизации.

5
задан skaffman 8 October 2009 в 22:22
поделиться

2 ответа

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

протокол 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 и должен разрешать неаутентифицированные соединения.

Примеры клиентского кода вы можете проверить этот ответ в Stack Overflow.

РЕДАКТИРОВАТЬ: Обновление ответа согласно комментарию

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

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

В вашем случае, возможное решение - использовать HttpClient из HttpComponents (преемник устаревшего Commons HTTP Client 3.x ). Посмотрите примеры и особенно Запрос через прокси и Примеры аутентификации через прокси .

4
ответ дан 15 December 2019 в 01:06
поделиться

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

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

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

0
ответ дан 15 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

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