Pregunta

Estoy tratando de iniciar sesión en un servidor FTP. Usando el siguiente código 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();

Sin embargo, el inicio de sesión falla cuando la contraseña contiene algunos charaters especiales. por ejemplo ('!' o '£')? Recibo la siguiente excepción.

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() 

No obtengo ninguna excepción cuando la contraseña no contiene caracteres especiales.

No hay solución correcta

Otros consejos

¿Qué servidor FTP es? ¿Puedes iniciar sesión usando otros programas? Si es así, usa Wireshark Para comparar lo que pasa sobre el cable.

Por lo tanto, probablemente sea solo una codificación de ANSI, así que intente

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

request.Credentials = new NetworkCredential("userName", secureString);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top