EOF inattendu dans la demande HTTPS
-
08-07-2019 - |
Question
J'ai la fonction suivante qui envoie XML à l'aide d'une requête Https
public WebResponse SendXmlPost(string url, string xml)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.KeepAlive = false;
request.ProtocolVersion = HttpVersion.Version11;
request.Method = "POST";
if (this.UseBasicAuthentication)
{
string usernamePassword = this.Login + ":" + this.Password;
request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)));
NetworkCredential cred = new NetworkCredential(this.Login, this.Password);
request.Credentials = cred;
}
if (this.desactivateCertificateChecking)
{
System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
};
}
byte[] postBytes = Encoding.UTF8.GetBytes(xml);
request.ContentType = "text/xml";
request.ContentLength = postBytes.Length;
Stream requestStream = request.GetRequestStream(); //error occurs here
requestStream.Write(postBytes, 0, postBytes.Length);
requestStream.Close();
WebResponse response = request.GetResponse();
return response;
}
Lorsque j'appelle cette méthode, j'ai et "EOF inattendu". exception:
System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count) +7067555
System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) +116
System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) +123
System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) +7243141
System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) +217
System.Threading.ExecutionContext.runTryCode(Object userData) +376
Avez-vous un indice?
Merci
La solution
Je pense que votre problème est le codage UTF8. Par défaut, le codage UTF-8 ajoute une nomenclature (ByteOrderMark) et votre ContentLength n'est pas synchronisé avec les données en cours de transmission. Essayez de créer un encodage UTF8 sans nomenclature (utilisez une autre surcharge) et cela devrait résoudre le problème.
De plus, je n’ajouterais pas moi-même l’en-tête d'authentification de base. Je voudrais simplement définir les références sur la demande et laisser HttpWebRequest se charger de l’authentification pour moi.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow