FTP специальный символ в пароле?

Я пытаюсь войти на FTP-сервер. Используя следующий код в 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();

Однако вход в систему не удается, когда пароль содержит некоторые специальные символы. например ('!' или '£')? Я получаю следующее исключение.

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

Я не получаю никаких исключений, когда пароль не содержит никаких специальных символов.

1 ответ

Что это за сервер ftp? Вы можете войти, используя другие программы? если да, используйте wireshark, чтобы сравнить то, что идет по проводу.

Так что это, вероятно, просто кодировка ANSI, поэтому попробуйте

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

request.Credentials = new NetworkCredential("userName", secureString);
Другие вопросы по тегам