Vb.Net - записанные байты превышают байты длины содержимого в XML-посте
Тьфу, я получаю исключение ProtocolViolationException "Количество байтов, записываемых в поток, превышает указанный размер байтов Content-Length". на следующий код.
Я пытался установить Content-Length многочисленными способами, но безуспешно.
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)
Я попытался установить длину содержимого с помощью xml.OutXML.Length
1 ответ
Решение
Попробуйте использовать WebClient, он облегчит код и позаботится о правильной очистке и удалении всех потоков:
Dim xml As New XmlDocument
xml.LoadXml("<foo>abc</foo>")
Using client As WebClient = New WebClient
client.Headers.Item(HttpRequestHeader.ContentType) = "application/xml"
Dim data As Byte() = Encoding.UTF8.GetBytes(xml.OuterXml)
Console.WriteLine(Encoding.UTF8.GetString(client.UploadData("https://domain.com", data)))
End Using