C # HttpWebRequest La connexion sous-jacente a été fermée: une erreur inattendue s'est produite sur un envoi
J'espère que vous pourrez m'aider avec cela. J'ai cherché sur Google tous les matins et essayé toutes les solutions que j'ai pu trouver ou penser de moi-même. Le site que je suis en train de la charge est en cours d'exécution TLS1.2 comme quelques autres sites que j'ai essayé de tester avec pour s'assurer qu'il n'était pas un TLS1.2 question. Les autres sites bien chargé.
byte[] buffer = Encoding.ASCII.GetBytes(
"mod=www&ssl=1&dest=account_settings.ws"
+ "&username=" + username.Replace(" ", "20%")
+ "&password=" + password.Replace(" ", "20%"));
ServicePointManager.MaxServicePointIdleTime = 1000;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
HttpWebRequest WebReq =
(HttpWebRequest)WebRequest.Create(
"https://secure.runescape.com/m=weblogin/login.ws");
WebReq.Method = "POST";
WebReq.KeepAlive = false;
WebReq.Referer =
"https://secure.runescape.com/m=weblogin/loginform.ws"
+ "?mod=www&ssl=1&expired=0&dest=account_settings.ws";
WebReq.ContentType = "application/x-www-form-urlencoded";
WebReq.ContentLength = buffer.Length;
Stream PostData = WebReq.GetRequestStream();
PostData.Write(buffer, 0, buffer.Length);
PostData.Close();
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
Stream Answer = WebResp.GetResponseStream();
StreamReader _Answer = new StreamReader(Answer);
reply = _Answer.ReadToEnd();
curAccount++;
if (reply.Contains("Login Successful"))
{
eturn true;
}
else
{
eturn false;
}
Peu importe ce que j'essaie, je reçois l'exception
La connexion sous-jacente a été fermée: Une erreur inattendue s'est produite lors de l'envoi.
Sous plus de détails, j'ai trouvé
L'authentification a échoué car le distant a fermé le flux de transport.
source d'informationauteur Rob
Vous devez vous connecter pour publier un commentaire.
Dans la version 4.0 du .Net framework le
ServicePointManager.SecurityProtocol
seulement offert deux options définir:Dans la prochaine version du cadre de la
SecurityProtocolType
énumérateur sagrandit avec les nouveaux protocoles Tls, donc si votre application peut utiliser de th version 4.5, vous pouvez également utiliser:Donc, si vous êtes sur .Net 4.5 changement de votre ligne de
à
de sorte que le ServicePointManager permettra de créer des ruisseaux qui prennent en charge Tls12 connexions.
Faire remarquer que les valeurs d'énumération peuvent être utilisés comme des drapeaux de sorte que vous pouvez combiner plusieurs protocoles avec un OU logique
Note
Essayez de garder le nombre de protocoles de vous soutenir aussi bas que possible et jusqu'à la date d'aujourd'hui avec les normes de sécurité. Ssll3 est plus considéré comme sûr et l'utilisation de Tls1.0
SecurityProtocolType.Tls
est en déclin.J'ai vécu cette exception, et elle est aussi liée à l'
ServicePointManager.SecurityProtocol
.Pour moi, c'était parce que
ServicePointManager.SecurityProtocol
avait été fixéTls | Tls11
(en raison de certains des sites web de l'application des visites brisé TLS 1.2) et lors de la visite d'un TLS 1.2-seul site internet (testé avec SSLLabs' SSL Rapport), il a échoué.Une option pour .NET 4.5 et supérieur est de permettre à toutes les TLS versions:
Pour .Net 4 utilisation:
Code pour WebTestPlugIn