FtpWebRequest 530仅使用EnableSsl

时间:2018-02-23 20:55:00

标签: c++-cli ftpwebrequest

我正在尝试在传统的C ++应用程序(VS2008)之上添加一些C ++ / CLI FtpWebRequest代码。下面的第一段代码工作正常,没有EnableSsl,但是一旦我添加EnableSsl,我就会得到530 Not Logged In。因此,只需使用或不使用EnableSsl行,即可获得相同的代码,凭据,URI等。

我能找到的所有其他答案最终都是服务器配置或凭据问题,但Filezilla客户端可以正常使用显式FTPS,下面的第二段代码(VS2015中的C#)可以与EnableSsl一起使用,并且第一个代码段正常工作没有EnableSsl就好了。

如何让我的VS2008 C ++ / CLI应用程序中的FtpWebRequest与EnableSsl一起使用?

编辑:在VS2008中,C#代码也具有与C ++ / CLI代码相同的“无EnableSsl / 530且具有EnableSsl行为”。因此,C#vs C ++ / CLI不再是数据点,但我仍然希望有人知道如何让EnableSsl在VS2008中运行。

// First snippet, C++/CLI VS2008, works fine WITHOUT EnableSsl line, 530 WITH EnableSsl line

FtpWebRequest^ ftpRequest = dynamic_cast<FtpWebRequest^>(WebRequest::Create(gcnew Uri(_T("ftp://server/path/dst_file.ext"))));
ftpRequest->Credentials = gcnew NetworkCredential(_T("username"),_T("password"));

ftpRequest->Method = WebRequestMethods::Ftp::UploadFile;
ftpRequest->UseBinary = true;
ftpRequest->EnableSsl = true;

StreamReader^ srcStream = gcnew StreamReader(_T("src_file.ext"));
array<Byte>^ fileData = Encoding::UTF8->GetBytes(srcStream->ReadToEnd());
srcStream->Close();
ftpRequest->ContentLength = fileData->Length;

Stream^ reqStream = ftpRequest->GetRequestStream();
reqStream->Write(fileData,0,fileData->Length);
reqStream->Close();

FtpWebResponse^ ftpResponse = dynamic_cast<FtpWebResponse^>(ftpRequest->GetResponse());
ftpResponse->Close();


// Second snippet, C# VS2015, works fine WITH EnableSsl

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://server/path/dst_file.ext");
request.Credentials = new NetworkCredential("username", "password");

request.Method = WebRequestMethods.Ftp.UploadFile;
request.UseBinary = true;
request.EnableSsl = true;

StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(new StreamReader("src_file.ext").ReadToEnd());
writer.Close();

FtpWebResponse response = (FtpWebResponse)request.GetResponse();
response.Close();

1 个答案:

答案 0 :(得分:0)

似乎问题是VS2008不支持使用最新加密协议的.NET版本,并且没有任何实际的解决方法而不升级(https://blogs.perficient.com/microsoft/2016/04/tsl-1-2-and-net-support/)。 / p>