I want my application to hit the HTTPS URL specified and download the CSV file from that URL.
I have the following code:
Program.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.Net.Security;using System.IO;namespace httpWebRequest_Test{ class Program { static void Main(string[] args) { var webAddr = "https://SFTP URL/xyz.csv"; var httpWebRequest = (HttpWebRequest) WebRequest.Create(webAddr); httpWebRequest.ContentType = "text/csv"; httpWebRequest.Method = "POST"; var httpResponse = (HttpWebResponse) httpWebRequest.GetResponse(); //ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications); Stream resStream = httpResponse.GetResponseStream(); } AcceptAllCertification aac = new AcceptAllCertification(); public static RemoteCertificateValidationCallback AcceptAllCertifications { get; set; } }}
AcceptAllCertifications.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace httpWebRequest_Test{ class AcceptAllCertification { public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) { return true; } }}
I am not receiving any error at compile time. But at run time, I am seeing the following error:
The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel
How do I overcome this error?
Edit 1:
I tried to access the same URL from the browser and it is showing me the following screen:
Only after adding exception am I able to continue.
Edit 2:
After following answer's by @AndrewSilver and @Übercoder, I am seeing the following error:
The remote server returned an error: (411) Length Required
Thereafter I added httpWebRequest.ContentLength = 0;
, which led me to the following error:
The remote server returned an error: (405) Method Not Allowed.
Thereafter I added httpWebRequest.ContentLength = 100;
, which led me to the following error:
ProtocolViolationException: You must provide a request body if you set ContentLength>0 or SendChunked==true. Do this by calling [Begin]GetRequestStream before [Begin]GetResponse.
NOTE: Anyone who improves my answer by providing a solution without bypassing Certificate validation will be marked as accepted.