Question

Je suis en train de se connecter à un serveur ftp. En utilisant le code suivant en C #.

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp-server");

request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
// This example assumes the FTP site uses anonymous logon.
//request.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequired;
request.Credentials = new NetworkCredential("userName", "password!#£");
FtpWebResponse response = (FtpWebResponse)request.GetResponse();

Cependant, la connexion échoue lorsque le mot de passe contient des charaters spéciales. par exemple ( '!' ou '£')? Je reçois l'exception suivante.

Unhandled Exception: System.Net.WebException: The remote server returned an error: (530) Not logged in.
  at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
  at System.Net.FtpWebRequest.RequestCallback(Object obj)
  at System.Net.CommandStream.Dispose(Boolean disposing)
  at System.IO.Stream.Close()
  at System.IO.Stream.Dispose()
  at System.Net.ConnectionPool.Destroy(PooledStream pooledStream)
  at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Bo
ean canReuse)
  at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
  at System.Net.FtpWebRequest.GetResponse()
  at FtpClientTest.Program.FtpWebRequest() 

Je ne suis pas une exception lorsque le mot de passe ne contient pas de caractères spéciaux.

Pas de solution correcte

Autres conseils

quel serveur ftp est-il? pouvez-vous grâce à la connexion d'autres programmes? Si oui, utilisez Wireshark pour comparer ce qui se passe sur le fil.

Il est donc probablement l'encodage ANSI, alors essayez

var secureString = new SecureString();
foreach (var b in Encoding.Default.GetBytes("password!#£"))
    secureString.AppendChar((char)b);

request.Credentials = new NetworkCredential("userName", secureString);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top