有没有办法在HTTP代理后面将文件上传到FTP服务器?
似乎使用.Net Webclient在HTTP代理后面不支持上传文件.(http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.proxy.aspx).
如果没有解决方法?如果没有,你知道我可以使用一个好的免费FTP库吗?
编辑:不幸的是,我没有任何FTP代理连接.
在活动FTP模式下,服务器启动与客户端的数据连接.如果客户端在HTTP代理后面,这显然不起作用.在被动FTP模式下,客户端启动初始连接和数据连接.由于HTTP代理可以隧道传输任意传出TCP连接(使用CONNECT方法),因此应该可以通过HTTP代理以被动模式访问FTP服务器.
在FtpWebRequest
似乎支持被动模式.但是,我不明白为什么支持文件下载和目录列表,而文件上载也使用相同的数据连接.
你是否确认FtpWebRequest
配置为被动模式不能通过HTTP代理工作,目录列表/文件下载工作正常?
大多数FTP代理在连接上做他们的事情,所以如果你没有代理,你这样做:
服务器:myftpserver.com
用户:我
密码:密码
使用FTP代理,您可以:
服务器:ftpproxy.mydomain.com
用户:me@myftpserver.com
密码:密码
它只是从那里开始工作.通过squid代理,我正在使用这个正确的第二个(尝试调试某些东西).
...但是因为你没有FTP代理....
你有SOCKS代理吗?这可能会奏效,但我不知道.NET是否可以做到这一点.否则,说实话,我觉得你被卡住了!与HTTP相比,FTP是一种"奇怪的"协议,因为它有一个控制通道(端口21)和一个数据通道(或多个,在随机端口上),所以通过代理进入是有趣的.至少说!
我们的Rebex FTP/SSL可以使用HTTP代理.它不是免费的,但......
// 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();