C # FTP за прокси с FtpWebRequest [дубликат]

  • Добавьте маркеры кликов.
  • Когда он выполняется, нажмите позицию текущего маркера в массиве.
  • Если длина массива равна два, вызовите службу маршрутов с этими двумя местоположениями в качестве начальной и конечной точек.
  • Подобно в этом примере , но вместо того, чтобы прослушивать клики «map», используйте «маркер» для прослушивания кликов.

    Вы сказали, что хотите заставить первый клик находиться на марке геолокации, вам нужно написать код, чтобы проверить местоположение маркера и убедиться, что он является маркером геолокации если вы хотите это сделать. Я бы подумал, что было бы проще просто нажать на один из целевых маркеров, а затем сформировать направления из маркера геолокации (для чего вам нужно будет сохранить специальную ссылку).

    Пример, предполагающий, что начало - это фрагмент кода геолокации

    из примера:

    var geolocation = null;
      var ren = null;
    
      function initialize() {
    
        var locations = [
          ['Hougang', 1.37265, 103.893658],
          ['Punggol', 1.400617, 103.907833],
          ['MacRitchie Reservoir', 1.346002, 103.825436],
          ['Bishan', 1.352051, 103.849125],
          ['Sentosa', 1.251226, 103.830757]
        ];
    
        var map = new google.maps.Map(document.getElementById('map_canvas'), {
          zoom: 13,
          center: new google.maps.LatLng(1.37265, 103.893658),
          mapTypeId: google.maps.MapTypeId.ROADMAP
        });
    
        var infowindow = new google.maps.InfoWindow();
    
        var marker, i;
    
        // Place a marker
        geolocation = new google.maps.Marker({
          position: map.getCenter(),
          map: map,
          title: 'Your geolocation',
          icon: 'https://maps.google.com/mapfiles/ms/micons/green.png'
        });
    
    
        for (i = 0; i < locations.length; i++) {
          marker = new google.maps.Marker({
            position: new google.maps.LatLng(locations[i][1], locations[i][2]),
            map: map
          });
    
          google.maps.event.addListener(marker, 'click', (function(marker, i) {
            return function() {
              infowindow.setContent(locations[i][0]);
              infowindow.open(map, marker);
              if (ren && ren.getMap()) ren.setMap(null);
              ren = new google.maps.DirectionsRenderer({
                'draggable': true
              });
              ren.setMap(map);
              ren.setPanel(document.getElementById("directionsPanel"));
              ser = new google.maps.DirectionsService();
    
              //Cria a rota, o DirectionTravelMode pode ser: DRIVING, WALKING, BICYCLING ou TRANSIT
              ser.route({
                'origin': geolocation.getPosition(),
                'destination': marker.getPosition(),
                'travelMode': google.maps.DirectionsTravelMode.DRIVING
              }, function(res, sts) {
                if (sts == 'OK') ren.setDirections(res);
              })
            }
          })(marker, i));
        }
    
        // Check if user support geo-location
        if (navigator.geolocation) {
          navigator.geolocation.getCurrentPosition(function(position) {
            var latitude = position.coords.latitude;
            var longitude = position.coords.longitude;
            var geolocpoint = new google.maps.LatLng(latitude, longitude);
    
            var mapOptions = {
                zoom: 8,
                center: geolocpoint,
                mapTypeId: google.maps.MapTypeId.HYBRID
              }
              // Place a marker
            geolocation = new google.maps.Marker({
              position: geolocpoint,
              map: map,
              title: 'Your geolocation',
              icon: 'http://labs.google.com/ridefinder/images/mm_20_green.png'
            });
          });
        } else {
          // Place a marker
          geolocation = new google.maps.Marker({
            position: map.getCenter(),
            map: map,
            title: 'Your geolocation',
            icon: 'http://labs.google.com/ridefinder/images/mm_20_green.png'
          });
        }
      }
      google.maps.event.addDomListener(window, 'load', initialize);
    html,
    body,
    #map_canvas {
      margin: 0;
      padding: 0;
      height: 100%;
    }
    
    
3
задан Martin Prikryl 7 April 2017 в 07:32
поделиться

5 ответов

Если у вас есть бюджет для этого - Dart сделать несколько классных классов для этого:

http://www.dart.com/ или конкретно http: //www.dart.com/ptftpnet.aspx

1
ответ дан DaveHogan 16 August 2018 в 04:15
поделиться
  • 1
    Я не уверен, что смогу его размахивать, но это похоже на достойное решение. Чтение их сайта также предполагает, что просто невозможно использовать FTP-прокси с тем, что предусмотрено в .NET CLR. – Joel Goodwin 2 September 2010 в 11:35

Они утверждают, что можно перечислить, listdetails и загрузить через прокси. Однако я не мог заставить это работать с межсетевым экраном isa. Поэтому я отключил прокси-сервер по умолчанию в своем app.config и добавил правило для клиента ForeFront / ISA. Для этого я создал файл c: \ programdata \ microsoft \ firewall client 2004 \ application.ini с содержимым:

[applicationName] DisableEx = 0 Disable = 0 NameResolution = R

где applicationName - это текущий exe минус расширение .exe.

-1
ответ дан csaam 16 August 2018 в 04:15
поделиться
  • 1
    Я считаю, что это относится к прокси-серверу HTTP, а не к прокси-серверу FTP. – Joel Goodwin 26 October 2010 в 08:03

Я знаю, что это не так, как раньше, но да, я могу заставить FtpWebRequest работать с прокси-сервером ftp, используя старые трюки настройки URL-адреса для

"ftp://your.proxy.server/theFileToDownload")" 

Тогда установите свои учетные данные в сети

username="ftpUserName@ftp.realserver.com" 

и

password="password". 

Я помню, как это делалось в плохие старые дни WININET, а иногда старые трюки по-прежнему являются лучшими трюками.

YMMV, конечно.

3
ответ дан davek 16 August 2018 в 04:15
поделиться

Если FTP-прокси позволяет указать всю информацию о цели с помощью команд USER и PASS, вы можете использовать свойство Credentials .

Как правило, вы указываете имя пользователя в форме user@proxyuser@host и пароль в форме password@proxypassword:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path");
request.Credentials = new NetworkCredential("user@proxyuser@host", "password@proxypassword");

Если прокси не требует аутентификации, используйте форму user@host и password:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path");
request.Credentials = new NetworkCredential("user@host", "password");

Но ваш прокси-сервер может также потребовать другого синтаксиса, например:

  • отдельных USER команд для прокси-сервера пользователь и целевой пользователь хоста
  • OPEN команда
  • SITE команда

В этих случаях вы не можете использовать FtpWebRequest. Вы должны использовать стороннюю FTP-клиентскую библиотеку.

Например, с помощью WinSCP .NET assembly вы можете использовать:

// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Ftp,
    HostName = "host",
    UserName = "user",
    Password = "password",
};

// Configure proxy
sessionOptions.AddRawSettings("ProxyHost", "proxy");
sessionOptions.AddRawSettings("FtpProxyLogonType", "2");
sessionOptions.AddRawSettings("ProxyUsername", "proxyuser");
sessionOptions.AddRawSettings("ProxyPassword", "proxypassword");

using (Session session = new Session())
{
    // Connect
    session.Open(sessionOptions);

    // Your code
}

Для параметров для SessionOptions.AddRawSettings , см. исходные настройки .

Легче настроить параметры прокси-сервера в графическом интерфейсе WinSCP и он создает для вас код кода FTP C # .

Обратите внимание, что сборка WinSCP .NET не является родной библиотекой .NET. Это довольно тонкая оболочка .NET поверх консольного приложения.

(я автор WinSCP)

1
ответ дан Martin Prikryl 16 August 2018 в 04:15
поделиться
3
ответ дан davek 29 October 2018 в 09:40
поделиться
Другие вопросы по тегам:

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