2011-02-19 1 views
0

Ugh, je reçois toujours une exception ProtocolViolationException "Les octets à écrire dans le flux dépassent la taille d'octets Content-Length spécifiée." sur le code suivant.Vb.Net - Octets écrits dépassent les octets Content-Length dans le message XML

J'ai essayé de définir Content-Length de nombreuses façons sans succès.

Dim url = "https://domain.com" 
Dim req As WebRequest = WebRequest.Create(url) 
req.Method = "POST" 
req.ContentType = "application/xml" 

Dim utf8 As New UTF8Encoding() 
req.ContentLength = utf8.GetByteCount(xml.OuterXml) 

xml.Save(req.GetRequestStream()) // throws the exception 
req.GetRequestStream().Close() 

Dim httpResp As WebResponse = req.GetResponse() 
Dim stReader As StreamReader = New StreamReader(httpResp.GetResponseStream()) 
Dim strResponse As String 

strResponse = stReader.ReadToEnd() 

Console.WriteLine(strResponse) 

J'ai essayé le réglage de la longueur de contenu à l'aide xml.OutXML.Length

+0

Que se passe-t-il si vous omettez line: req.ContentLength = utf8.GetByteCount (xml.OuterXml)? – CarneyCode

+0

L'API nécessite que j'envoie un en-tête Content-Length valide. – doremi

+0

Possible duplicate: http://stackoverflow.com/questions/5048753/how-to-post-xml-document-to-http-with-vb-net – Anuraj

Répondre

1

Essayez avec un WebClient, il rend le code plus facile et il prend soin de rincer correctement et éliminer tous les cours d'eau:

Que se passe-t-il si vous omettez line: req.ContentLength = utf8.GetByteCount (xml.OuterXml)?
+0

J'ai besoin de l'en-tête Content-Length. C'est requis par l'API. – doremi

+0

@Joshua McGinnis, l'en-tête de demande 'Content-Length' est automatiquement défini par' WebClient' en fonction de la longueur des données que vous envoyez. Donc, avec mon exemple XML, 'Content-Length: 14' sera envoyé dans la requête. N'essayez jamais de définir cet en-tête manuellement car vous pourriez obtenir des résultats incohérents et violer la spécification du protocole HTTP. –

+0

Je ne le savais pas! Comment est-ce que j'imprimerais tous les en-têtes ainsi je peux ceci? – doremi

Questions connexes