0

パスワードに特殊文字「§」を含む FtpWebRequest を使用すると問題が発生します。コードは次のようになります。

FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://ftphost"));
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
reqFTP.UsePassive = true;
reqFTP.EnableSsl = false;
reqFTP.Timeout = 60000;
reqFTP.UseBinary = false;
reqFTP.Credentials = new NetworkCredential("user", "pa§");

FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

GetResponse() メソッドが「530 ユーザーがログインできません」で失敗します。FileZilla を使用すると、ログインが機能します。

Wireshark でネットワーク トラフィックを追跡したところ、次のことがわかりました。

  • FileZilla はパスワードを「pa\302\247」に変換し、ログインを試みて失敗します。その後、FileZilla はパスワード「pa\247」で接続を再試行し、成功します。
  • FtpWebRequest はパスワードを「pa\302\247」に変換し、ログインを試みて失敗し、例外をスローします。

FtpWebRequest に強制的にパスワードを「pa\302\247」ではなく「pa\247」に変換させるにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

0

これはエンコードの問題のようです。§文字は、UTF-8 では\ 302\ 247ISO-8859-1 では\247です。あなたが提供した情報に基づいて、これはあなたのリクエストが文字セット UTF-8 で送信されており、サーバーが ISO-8859-1 を予期していることを示しています。そこから 2 つの選択肢があります。ftp サーバーにアクセスできる場合は、デフォルトの文字セットを変更できるはずです。それ以外の場合は、文字セット ISO-8859-1 を使用して ftp リクエストを送信する必要があります。テストする時間はありませんが、次のコードを試してみてください (ヘッダーが追加されていることに注意してください)。

FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://ftphost"));
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
reqFTP.UsePassive = true;
reqFTP.EnableSsl = false;
reqFTP.Timeout = 60000;
reqFTP.UseBinary = false;
reqFTP.Credentials = new NetworkCredential("user", "pa§");
reqFTP.Headers.Add(HttpRequestHeader.ContentType, "text/plain; charset=\"ISO-8859-1\"");

FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
于 2013-10-07T13:14:28.150 に答える