Gary Burch
Gary Burch

Reputation: 31

Download text file from website using WebCLient

We recently switched our ftp site at work from ftp://address to https://ftp.address and now my application that retrieves files is unable to download files with expected content.

I previously used FtpWebRequest and it has been working for many years. I am now trying to use WebClient and it downloads a file but it is not the text file I need. Instead, the contents of the file turns out to be some HTML.

Previous that worked:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(getAppSetting("URI") + getAppSetting("FilePath") + args[0].ToString());

request.Method = WebRequestMethods.Ftp.DownloadFile;

setCredentials(request);

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

Changed code to handle https:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

WebClient request = new WebClient();                  

setCredentials(request);

string file = request.DownloadString(getAppSetting("URI") + getAppSetting("FilePath") + args[0].ToString());

The result is a file that is downloaded but it contains HTML. I expect to have the contents of the file on the website I am pulling from.

Upvotes: 0

Views: 541

Answers (1)

Gary Burch
Gary Burch

Reputation: 31

After a couple of weeks of research, I finally found out what I needed to do and the answer was quite simple. I found out that our new website uses SSH so I installed SSH.Net via my nugent package to Visual Studio, and added "using Renci.SshNet;". I used the following code to download the file to my local drive:

using (SftpClient sftp = new SftpClient("ftp.website.com", 22,"username", "password")
{
   sftp.Connect();

   if (sftp.IsConnected)
   {
     using (Filestream fs = new FileStream("Output.txt", FileMode.Create))
      {
        sftp.DownloadFile("/file/Client/Input.txt", fs);
      }
   } 

   sftp.Disconnect();
 }

This works perfectly. My file no longer downloads as an HTML file and I get my desired output. I hope this saves someone else a lot of time.

Upvotes: 1

Related Questions