2016-06-23 6 views
-1

私は、C#ライブラリを使用してFTPからファイルをダウンロードしようとしています。私たちが使用しているコードは簡単です。c#Ftpclientが機能せず、Pythonがデータを取得できます

static void Main(string[] args) 
     { 
      Connect(true, true, true); 
     }  
      private static void Connect(bool keepAlive, bool useBinary, bool usePassive) 
     { 
      string RemoteFtpPath = "ftp://ftp.xxxx.ac.uk/incoming/testExtractCSVcoursesContacts.csv"; 
      const string Username = "anonymous"; 
      const string Password = "[email protected]"; 

      var request = (FtpWebRequest)WebRequest.Create(new Uri(RemoteFtpPath)); 
      request.Method = WebRequestMethods.Ftp.DownloadFile; 
      request.KeepAlive = keepAlive; 
      request.UsePassive = usePassive; 
      request.UseBinary = useBinary; 
      request.Credentials = new NetworkCredential(Username, Password); 
      request.Timeout = 30000; 

      try 
      { 
       var response = (FtpWebResponse)request.GetResponse(); 
       var responseStream = response.GetResponseStream(); 
       var reader = new StreamReader(responseStream); 

       var fileString = reader.ReadToEnd(); 

       Console.WriteLine(
        $"Success! keepAlive={keepAlive}, useBinary={useBinary}, usePassive={usePassive} Length={fileString.Length}"); 

       reader.Close(); 
       response.Close(); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(
        $"Failed! keepAlive={keepAlive}, useBinary={useBinary}, usePassive={usePassive}, message={e.Message}"); 
      } 
     } 
     ` 

また、同じ結果を持つpassive = trueを設定しようとしました。 我々が取得しているwiresharkの使用して、それを実行します。Wireshark log c#

は、今、私たちは、Pythonと同じことを試み、それがうまく働いています:

import urllib.request 
data = urllib.request.urlretrieve('path') 
print(data) 

wiresharkのログはかなり異なっています: wireshark log

をだから、別のものを試しましたが、これを並べ替えることはできません。

+1

* *問題の説明ではありません「動作しません」。正確に何が間違っていますか?エラー/例外はありますか? [ログファイル](http://stackoverflow.com/q/9664650/850848)、呼び出しスタック、何か(すべて)を投稿してください。 C#セッションからのあなたのWiresharkログにはFTPリクエストが表示されないので、サーバーが「500」に応答しているかどうかわかりません。おそらく 'OPTS utf8 on 'だが、' FtpWebRequest'は拒否されても構わない。 –

+0

はい、問題は私たちが接続できなかったということでした。あなたのことは間違いありません。さらなる調査をした結果、c#ライブラリは常にOPTSを使用していました。ライブラリを変更すると、すべてが今すぐソートされます。この種のサーバーで動作するようにFtpWebRequestを構成することはできません。ご協力いただきありがとうございます –

答えて

0

一部のftpサーバはOPTS UTF8をサポートしていませんが、引き続きUTF8でファイル名を送信します。 (OPT UTF8は、FTP国際化規格では必要ありませんが、UTF8ファイル名をサポートしています)..NET Ftpクラスは、OPTS UTF8に対するOKレスポンスを受け取らないと、デフォルトのコードページを使用します... UTF8を使用する方法をMSが提供していないのは残念です。これは、UTF8準拠のサーバーとの間で国際ファイル名を送受信できないためです。たFtpWebRequestはサポートされていないよう

問題が別のライブラリを使用した後にソートされ、それ

関連する問題