J'écris un programme qui lit le contenu à partir d'une URL fournie par l'utilisateur. Mon problème est dans le code qui va quelque chose comme ça:
Uri uri = new Uri(url);
WebRequest webRequest = WebRequest.Create(uri);
WebResponse webResponse = webRequest.GetResponse();
ReadFrom(webResponse.GetResponseStream());
Et cela se casse si le rl fourni est une URL "https: //". Quelqu'un peut-il m'aider à modifier ce code afin qu'il fonctionne avec du contenu crypté SSL. Merci.
Vous le faites correctement, mais les utilisateurs peuvent fournir des URL aux sites sur lesquels des certificats SSL non valides sont installés. Vous pouvez ignorer ces problèmes de certificat si vous mettez cette ligne avant de faire la demande Web réelle:
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
où AcceptAllCertifications
est défini comme
public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
return true;
}
Ce lien vous intéressera: http://msdn.Microsoft.com/en-us/library/ds8bxk2a.aspx
Pour les connexions http, les classes WebRequest et WebResponse utilisent SSL pour communiquer avec les hôtes Web qui prennent en charge SSL. La décision d'utiliser SSL est prise par la classe WebRequest, en fonction de l'URI qui lui est attribué. Si l'URI commence par "https:", SSL est utilisé. si l'URI commence par "http:", une connexion non chiffrée est utilisée.
Celui-ci a fonctionné pour moi:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;