2016-03-05 133 views
1

我试图通过使用隐式SSL设置的FTP下载文件。这是我到目前为止的代码:F#通过隐式SSL通过FTP下载文本文件

open System.Net 

let user = "user_name" 
let pwd = "password" 
let ftpLocation = @"ftp://*server ip*/*file location*" 
let request = FtpWebRequest.Create(ftpLocation) :?> FtpWebRequest 
request.Credentials <- new NetworkCredential(user, pwd) 
request.Method <- WebRequestMethods.Ftp.DownloadFile 
request.Proxy <- null 
let response = request.GetResponse() :?> FtpWebResponse 

我得到一个远程服务器错误:

System.Net.WebException occurred 
Message: Exception thrown: 'System.Net.WebException' in System.dll 
Additional information: The remote server returned an error: (530) Not logged in. 

缺少什么我在这里?我认为我以他们需要的方式通过了证书。思考?我有一个非常困难的时间找到任何文件。任何帮助表示赞赏。

+0

我发现[这个职位上的SO(http://stackoverflow.com/questions/10352165/using-ftpwebrequest-with-an- error-the-remote-server-returned-error-530-not-loge),它指向[关于这个场景的文章](http://www.godwinpaul.com/2013/06/25/ftp-c-误差最远程服务器返回-AN-错误-530-未登录/)。它有帮助吗? – Roujo

+0

@Roujo,也许但我不知道它为域变量需要什么,我找不到域变量的示例。这应该是什么?这应该是FTP地址? –

+0

@Roujo,谢谢。这是我需要这个工作的一部分。 –

回答

3

我要离开这里,为下一个必须这样做的穷人。我花了很多来自不同地方件得到它的工作:

let ftpLocation = @"ftp://*server ip*/path/to/file/example.txt"  
let request = FtpWebRequest.Create(ftpLocation) :?> FtpWebRequest 
let user = "username" 
let pwd = @"password" 
request.Credentials <- new NetworkCredential(user.Normalize(), pwd.Normalize()) 
request.EnableSsl <- true 
ServicePointManager.ServerCertificateValidationCallback <- (fun sender certificate chain sslPolicyErrors -> true) 
request.Method <- WebRequestMethods.Ftp.DownloadFile 
request.Proxy <- null 
let response = request.GetResponse() 
let responseStream = response.GetResponseStream() 
let reader = new StreamReader(responseStream) 
Console.WriteLine(reader.ReadToEnd()) 
Console.WriteLine("Download complete") 

reader.Close() 
response.Close() 
+0

感谢队友,看起来不错! –