web-dev-qa-db-fra.com

Obtenir «Échec de la négociation ... format de paquet inattendu» lors de l'utilisation de WebClient.UploadFile () avec «https» lorsque le serveur possède un certificat SSL valide

J'essaie d'utiliser WebClient.UploadFile avec une URL HTTPS mais je me retrouve avec

"System.IO.IOException: la négociation a échoué en raison d'un format de paquet inattendu"

Le même code fonctionne parfaitement avec Http mais le serveur que j'essaie de toucher a un certificat SSL parfaitement fin. Voici tout ce qui concerne l'appel Web:

var url = WebServiceCommunication.GetProtocolName() + "..."; //turns out to be     "https://...
var wc = new WebClient();
//I am adding: 
wc.Headers.Add(HttpRequestHeader.KeepAlive, "...")
wc.Headers.Add(HttpRequestHeader.AcceptLanguage, "...")
we.Headers.Add(HttpRequestHeader.Cookie, "...")

wc.UploadFile(url, "POST", filename);

Est-ce le problème avec l'un des HttpRequestHeaders que j'ajoute ET utilise https avec ceux-ci? Ou manque-t-il un en-tête nécessaire si je veux utiliser https? Quelqu'un a-t-il des indications sur la raison pour laquelle cela fonctionnerait avec HTTP mais PAS HTTPS lorsque le certificat SSL est valide?

19
user1867353

Vous devez vous assurer que le port auquel vous vous connectez est le port 443 au lieu du port 80.

Exemple de définition explicite du port à utiliser dans l'URL:

var request = (HttpWebRequest) WebRequest.Create("https://example.com:443/");
request.Method = "GET";
request.UserAgent = "example/1.0";
request.Accept = "*/*";
request.Host = "example.com";

var resp = (HttpWebResponse) request.GetResponse();
24
rene