Загрузка файла FTP с прокси HTTP

Вы можете поместить некоторые инструкции Java в цикл для инициализации коллекции:

List characters = new ArrayList() {
    {
        for (char c = 'A'; c <= 'E'; c++) add(c);
    }
};

Random rnd = new Random();

List integers = new ArrayList() {
    {
         while (size() < 10) add(rnd.nextInt(1_000_000));
    }
};

Но этот случай влияет на производительность, проверьте это обсуждение

20
задан John Saunders 19 September 2010 в 17:20
поделиться

8 ответов

Одно решение состоит в том, чтобы попробовать реализацию Mono FtpWebRequest. Я взглянул на его исходный код, и кажется, что будет легко изменить так, чтобы все соединения (управление и данные) были туннелированы через Прокси HTTP.

Вы устанавливаете соединение TCP к своему Прокси HTTP вместо фактического FTP-сервера. Затем Вы отправляете CONNECT myserver:21 HTTP/1.0 сопровождаемый двумя CRLFs (CRLF = \r\n). Если прокси нужна аутентификация, необходимо использовать HTTP/1.1 и также отправить заголовок аутентификации прокси с учетными данными. Затем необходимо считать первую строку ответа. Если это запускается с" HTTP/1.0 200 " или" HTTP/1.1 200 ", затем (остальная часть кода) можно продолжить использовать соединение, как будто это подключено непосредственно к FTP-серверу.

3
ответ дан 30 November 2019 в 00:48
поделиться

большинство прокси FTP делает свою вещь на соединении, поэтому если у Вас не было прокси, Вы делаете это:

  • сервер: myftpserver.com
  • пользователь: я
  • пароль: pwd

с помощью прокси FTP, Вы делаете:

  • сервер: ftpproxy.mydomain.com
  • пользователь: me@myftpserver.com
  • пароль: pwd

и это просто работают он из там. Я использую это ПРАВО В ЭТУ СЕКУНДУ (пытающийся отладить что-то) через прокси сквида.

..., но поскольку у Вас нет прокси FTP....

у Вас есть прокси SOCKS? Это могло бы работать, но я не знаю, может ли.NET сделать это. Иначе, честно говоря, я думаю, что Вы застреваете! FTP является "нечетным" протоколом, по сравнению с HTTP, поскольку он имеет канал управления (порт 21), и канал передачи данных (или больше чем один, на случайном порте), таким образом идя через прокси является.... забавой по меньшей мере!

5
ответ дан 30 November 2019 в 00:48
поделиться

В активном режиме FTP сервер инициирует передачу данных клиенту. Если клиент будет позади Прокси HTTP, то это, очевидно, не будет работать. В пассивном режиме FTP это - клиент, который инициирует и начальную букву и соединения данных. Так как Прокси HTTP могут туннелировать произвольные исходящие соединения TCP (использующий метод ПОДКЛЮЧЕНИЯ), должно быть возможно получить доступ к FTP-серверу в пассивном режиме через Прокси HTTP.

Эти FtpWebRequest, кажется, поддерживает пассивный режим. Однако я не понимаю, почему загрузка файла и списки каталогов поддерживаются, тогда как загрузка файла, которая также использует ту же передачу данных, не.

Вы подтвердили, что FtpWebRequest настроенный для пассивного режима не работает через Прокси HTTP, через которого каталог загрузка listings/file работают просто великолепно?

9
ответ дан 30 November 2019 в 00:48
поделиться

Идентификатор действительно не видит соединение между прокси HTTP и загружающий на FTP-сервер. Если Вы используете класс прокси HTTP, это - для доступа http канавка ресурсов прокси HTTP. ftp является другим протоколом, и прокси ftp используют другой протокол.

-5
ответ дан 30 November 2019 в 00:48
поделиться

Если существует способ для Вас загрузить файл через FTP без C# затем, это должно также быть возможно в C#. Загрузка через браузер или работу с клиентами FTP?

одна библиотека FTP мне нравится большинство, библиотека FTP Client.NET .

2
ответ дан 30 November 2019 в 00:48
поделиться

Как Alexander говорит, Прокси HTTP могут проксировать произвольный трафик. То, в чем Вы нуждаетесь, является Клиентом FTP, который имеет поддержку использования Прокси HTTP. Alexander также корректен, что это только работало бы в пассивном режиме.

Мой работодатель продает такой клиент FTP, но это - инструмент уровня предприятия, который только стал частью очень большой системы.

я уверен, что существуют другие, доступные, который лучше соответствовал бы Вашим потребностям.

2
ответ дан 30 November 2019 в 00:48
поделиться

Наш Rebex FTP / SSL может использовать HTTP-прокси. Но это не бесплатно ...

// initialize FTP client 
Ftp client = new Ftp();

// setup proxy details  
client.Proxy.ProxyType = FtpProxyType.HttpConnect;
client.Proxy.Host = proxyHostname;
client.Proxy.Port = proxyPort;

// add proxy username and password when needed 
client.Proxy.UserName = proxyUsername;
client.Proxy.Password = proxyPassword;

// connect, login 
client.Connect(hostname, port);
client.Login(username, password);

// do some work 
// ... 

// disconnect 
client.Disconnect();
5
ответ дан 30 November 2019 в 00:48
поделиться

У меня была такая же проблема.

Моей основной целью было загрузить файл на ftp. И меня не заботило, будет ли мой трафик проходить через прокси или нет.

Итак, я просто установил для свойства FTPWebRequest.Proxy значение null сразу после FTPWebRequest.Create (uri).

И это сработало. Да, я знаю, что это не самое лучшее решение. И более того, я не понимаю, почему это сработало. Но цель все равно достигнута.

-1
ответ дан 30 November 2019 в 00:48
поделиться
Другие вопросы по тегам:

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