2010-09-02 3 views
3

Si je comprends bien, la propriété FtpWebRequest.Proxy indique un proxy HTTP. Je dois envoyer des demandes FTP à un serveur externe via un proxy FTP.Est-il possible d'utiliser C# FtpWebRequest via un proxy FTP?

La seule façon de travailler à ce jour est de créer un script qui utilise la commande Windows FTP et le télécharge de cette façon.

Est-il possible d'utiliser le FtpWebRequest pour télécharger des fichiers via un proxy FTP?

Répondre

1

Si vous avez le budget pour cela - Dart faire quelques grandes classes pour cela:

http://www.dart.com/ ou spécifiquement http://www.dart.com/ptftpnet.aspx

+0

Je ne suis pas sûr que je serais capable de balancer, mais il ressemble une solution décente. La lecture de leur site suggère également qu'il n'est tout simplement pas possible d'utiliser un proxy FTP avec ce qui est fourni dans le .NET CLR. –

-1

Ils affirment qu'il est possible de la liste, listdetails et télécharger via un proxy. Cependant, je ne pouvais pas obtenir cela pour fonctionner avec un pare-feu isa. J'ai donc désactivé le proxy par défaut dans mon app.config et ajouté une règle d'application pour le client ForeFront/ISA. Pour ce faire, je créé un fichier c: \ ProgramData \ Microsoft \ client pare-feu 2004 \ application.ini avec le contenu:

[applicationName] DisableEx = 0 Désactiver = 0 NameResolution = R

où applicationName est l'exe en cours d'exécution moins l'extension .exe.

+0

Je crois que cela fait référence à un proxy HTTP plutôt qu'à un proxy FTP. –

1

Je sais c'est bien passé la date d'échéance, mais oui, je suis en mesure d'obtenir FtpWebRequest de travailler avec un proxy ftp en utilisant les vieux trucs de configuration de l'URL à

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

Ensuite, réglez votre informations d'identification de réseau pour

username="[email protected]" 

et

password="password". 

je me suis souvenu de faire ce retour dans les mauvais WININE T jours, et parfois les vieux trucs sont toujours les meilleurs tours.

YMMV bien sûr.

3

Voici le code que j'ai utilisé auparavant, je devrais faire attention que je l'ai seulement testé contre un pare-feu Checkpoint afin que le format des commandes USER et PASS peut-être différent pour votre proxy FTP. Votre administrateur système connaîtra le format correct.

FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(
     new Uri("ftp://FTP PROXY HOST/actual/path/to/file/on/remote/ftp/server")); 
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; 
reqFTP.UseBinary = true; 

reqFTP.Credentials = new NetworkCredential 
     ("REMOTE FTP [email protected] PROXY [email protected] FTP HOST" 
     , "REMOTE FTP [email protected] PROXY PASSWORD"); 
0

Si le proxy FTP permet de spécifier toutes les informations sur la cible via USER et PASS commandes, vous pouvez utiliser le Credentials property.

En règle générale, vous spécifiez le nom d'utilisateur sous une forme [email protected]@host et mot de passe sous une forme [email protected]:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path"); 
request.Credentials = new NetworkCredential("[email protected]@host", "[email protected]"); 

Si le proxy ne nécessite pas d'authentification, utiliser un formulaire [email protected] et password:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path"); 
request.Credentials = new NetworkCredential("[email protected]", "password"); 

Mais votre serveur proxy peut également nécessiter une syntaxe différente, par exemple:

  • commandes séparées pour USER utilisateur proxy et l'utilisateur hôte cible
  • OPEN commande
  • SITE commande

Dans ces cas, vous ne pouvez pas utiliser le FtpWebRequest. Vous devez utiliser une bibliothèque cliente FTP tierce à la place.

Par exemple avec WinSCP .NET assembly, vous pouvez utiliser:

// 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 
} 

Pour les options du SessionOptions.AddRawSettings, voir raw settings.

Plus facile est à configure the proxy settings in WinSCP GUI et l'avez generate C# FTP code template pour vous.

Notez que l'assembly WinSCP .NET n'est pas une bibliothèque .NET native. Il s'agit plutôt d'un wrapper .NET fin sur une application de console.

(je suis l'auteur de WinSCP)