Acceso a la URL HTTPS desde la aplicación de consola usando C #
Quiero que mi aplicación llegue a la URL HTTPS especificada y descargue el archivo CSV de esa URL.
Tengo el siguiente código:
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;
}
}
}
No recibo ningún error en el momento de la compilación. Pero en tiempo de ejecución, veo el siguiente error:
Se cerró la conexión subyacente: no se pudo establecer una relación de confianza para el canal seguro SSL / TLS
¿Cómo supero este error?
Editar 1:
Intenté acceder a la misma URL desde el navegador y me muestra la siguiente pantalla:
Solo después de agregar una excepción puedo continuar.
Edición 2:
Después de seguir las respuestas de @AndrewSilver y @ Übercoder, veo el siguiente error:
El servidor remoto devolvió un error: (411) Longitud requerida
A partir de entonces agreguéhttpWebRequest.ContentLength = 0;
, lo que me llevó al siguiente error:
El servidor remoto devolvió un error: (405) Método no permitido.
A partir de entonces agreguéhttpWebRequest.ContentLength = 100;
, lo que me llevó al siguiente error:
ProtocolViolationException: debe proporcionar un cuerpo de solicitud si establece ContentLength> 0 o SendChunked == true. Haga esto llamando a [Begin] GetRequestStream antes de [Begin] GetResponse.
NOTA: Cualquiera que mejore mi respuesta al proporcionar una soluciónsin pasar por alto la validación del certificado será marcado como aceptado