2008-09-16 12 views
3

実際にHTTPプロキシまたはFTPゲートウェイの背後で動作することができる、.NETで使用するうまくいけば無料のFTPクラスを知っていますか? .NETのFtpWebRequestは恐ろしいことですが、私はここで自分自身をロールしたくありません。.NET用のFTPクライアントクラス

+0

私はFTPWebrequestで何が問題なのですか?バグ?またはおそらくそれはフードの下でIEを使用します(それは私が仮定していると仮定します) –

+0

FtpWebRequestには非常に間違っています。プロキシのサポートは、最初は貧弱です。 –

答えて

-2

System.Net.WebClientはftpのURLを扱うことができますし、使用するのが簡単です。これで資格情報とプロキシ情報を設定することもできます。

+0

男は明らかにそれはオプションではないと言った – DevelopingChris

+0

いいえ、彼はFTPWebRequestはオプションではないと述べた。 System.Net.WebClientは完全に別のクラスです。 –

+0

彼はいくつかの答えの後で彼の質問を変更しました... –

1

"Indy.Sockets"を試すことができます。これはftpを含む多くの高水準ネットワークプロトコルを扱うことができます。

+0

私はそれを使用しますが、一時ファイルを残すようないくつかの欠点があります。 –

0

組み込みクラスに取得しない場合、およびそれはうまく仕事をします。 PASV接続を使用する場合は、ファイアウォールの問題は発生しません。 FTPゲートウェイが何であるかはわかりませんが、HTTPプロキシがFTP接続にどのように影響するかはわかりません。

+0

dotnetftpclientはHTTPプロキシをサポートしていません。 –

2

私たちのRebex FTPはプロキシでうまく動作します。次のコードは、HTTPプロキシを使用してFTPに接続する方法を示しています(コードはFTP tutorial pageから取得しています)。

// initialize FTP client 
Ftp client = new Ftp(); 

// setup proxy details 
client.Proxy.ProxyType = FtpProxyType.HttpConnect; 
client.Proxy.Host = proxyHostname; 
client.Proxy.Port = proxyPort; 

// add proxy username and password when needed 
client.Proxy.UserName = proxyUsername; 
client.Proxy.Password = proxyPassword; 

// connect, login 
client.Connect(hostname, port); 
client.Login(username, password); 

// do some work 
// ... 

// disconnect 
client.Disconnect(); 

あなたは、私は最近、私のプロジェクトでこれを使用し、それは素晴らしい仕事をwww.rebex.net/ftp.net/download.aspx

+0

+1のコードサンプル –

0

の.Net 4.0以降は現在のFTPクライアントは、より多くの情報のため、このMSDNのリンクを参照してくださいクラス - 含まれています。

http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.aspx

私もPASVモードなどを使用するためのオプションを参照してください、完全に機能するように見える(またはので、私は願っています)。

+0

このクラスは、OPが元々(恐らくは)「恐ろしい」と記述したクラスです。このクラスは新しいものではありません(.NET 2.0以降で使用されています)。有用な方法でプロキシをサポートしていません。 –

+1

OPが私たちの質問を変更し、私の答えを時代遅れにしました。 –

+0

downvoteを削除しました –

0

私はsimalorの問題を抱えていましたが、Socks4プロキシ経由でFTPS(明示的)通信用のクライアントを作成しました。

検索とテストの後、.NETライブラリStarksoftftpsが見つかりました。ここで http://starksoftftps.codeplex.com/

私のサンプルコードです:ここで

Socks4ProxyClient socks = new Socks4ProxyClient("socksproxyhost",1010); 
FtpClient ftp = new FtpClient("ftpshost",2010,FtpSecurityProtocol.Tls1Explicit); 
ftp.Proxy = socks; 
ftp.Open("userid", "******"); 
ftp.PutFile(@"C:\519ec30a-ae15-4bd5-8bcd-94ef3ca49165.xml"); 
Console.WriteLine(ftp.GetDirListAsText()); 
ftp.Close(); 
0

は、アップロードがHTTPプロキシを経由してFTPにファイルを私のオープンソースのC#コードです。

public bool UploadFile(string localFilePath, string remoteDirectory) 
{ 
    var fileName = Path.GetFileName(localFilePath); 
    string content; 
    using (var reader = new StreamReader(localFilePath)) 
     content = reader.ReadToEnd(); 

    var proxyAuthB64Str = Convert.ToBase64String(Encoding.ASCII.GetBytes(_proxyUserName + ":" + _proxyPassword)); 
    var sendStr = "PUT ftp://" + _ftpLogin + ":" + _ftpPassword 
     + "@" + _ftpHost + remoteDirectory + fileName + " HTTP/1.1\n" 
     + "Host: " + _ftpHost + "\n" 
     + "User-Agent: Mozilla/4.0 (compatible; Eradicator; dotNetClient)\n" + "Proxy-Authorization: Basic " + proxyAuthB64Str + "\n" 
     + "Content-Type: application/octet-stream\n" 
     + "Content-Length: " + content.Length + "\n" 
     + "Connection: close\n\n" + content; 

    var sendBytes = Encoding.ASCII.GetBytes(sendStr); 

    using (var proxySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) 
    { 
     proxySocket.Connect(_proxyHost, _proxyPort); 
     if (!proxySocket.Connected) 
      throw new SocketException(); 
     proxySocket.Send(sendBytes); 

     const int recvSize = 65536; 
     var recvBytes = new byte[recvSize]; 
     proxySocket.Receive(recvBytes, recvSize, SocketFlags.Partial); 

     var responseFirstLine = new string(Encoding.ASCII.GetChars(recvBytes)).Split("\n".ToCharArray()).Take(1).ElementAt(0); 
     var httpResponseCode = Regex.Replace(responseFirstLine, @"HTTP/1\.\d (\d+) (\w+)", "$1"); 
     var httpResponseDescription = Regex.Replace(responseFirstLine, @"HTTP/1\.\d (\d+) (\w+)", "$2"); 
     return httpResponseCode.StartsWith("2"); 
    } 
    return false; 
} 
+0

BuiltinフレームワークFtpWebRequestは、HTTPプロキシを使用してディレクトリを一覧表示し、ファイルをダウンロードできますが、アップロードすることはできません。 –

+0

var request =(FtpWebRequest)WebRequest.Create(uri); \t \t \t request.Credentials = FtpCredentials; \t \t \t request.Proxy =新しいWebProxy(_proxyHost、_proxyPort){Credentials = new NetworkCredential(_proxyUserName、_proxyPassword)}; \t \t \t request.UsePassive = true; \t \t \t \t \t \t使用(VARのRESP = request.GetResponse()) \t \t \t使用(VARストリーム= resp.GetResponseStream()) ....... –

関連する問題