私は、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のログはかなり異なっています:
をだから、別のものを試しましたが、これを並べ替えることはできません。
* *問題の説明ではありません「動作しません」。正確に何が間違っていますか?エラー/例外はありますか? [ログファイル](http://stackoverflow.com/q/9664650/850848)、呼び出しスタック、何か(すべて)を投稿してください。 C#セッションからのあなたのWiresharkログにはFTPリクエストが表示されないので、サーバーが「500」に応答しているかどうかわかりません。おそらく 'OPTS utf8 on 'だが、' FtpWebRequest'は拒否されても構わない。 –
はい、問題は私たちが接続できなかったということでした。あなたのことは間違いありません。さらなる調査をした結果、c#ライブラリは常にOPTSを使用していました。ライブラリを変更すると、すべてが今すぐソートされます。この種のサーバーで動作するようにFtpWebRequestを構成することはできません。ご協力いただきありがとうございます –