我坚持这个httpWebRequest问题。我需要将XML发送到网站。但我一直对我的要求做出否定回应。我看到了ContentLength设置的一些代码示例......这可能是问题,但我不知道....
用writePaymentRequest(...)编写的XML就像网站需要的那样,因为他们得到了我的xml标记并且他们用另一种编程语言成功了。结果只包含他们的错误而不是我应该接收的信息。
我无法设置内容长度,因为我不知道使用请求流创建编写器时的长度。
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("https://some.website.com");
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
using (writer = new XmlTextWriter(httpWebRequest.GetRequestStream(), System.Text.Encoding.UTF8))
{
writePaymentRequest(writer, registrant, amount, signature, ipaddress);
}
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
String stringResult = streamReader.ReadToEnd();
streamReader.Close();
答案 0 :(得分:4)
如果您首先将XmlTextWriter写入类似MemoryStream的内容,您就会知道长度。从那里,您可以获取字节,将httpWebRequest.ContentLength设置为字节数组的长度,然后将字节数组写入您的请求
修改的
代码的中间部分看起来像这样(我认为):
MemoryStream ms = new MemoryStream();
using (writer = new XmlTextWriter(ms, System.Text.Encoding.UTF8))
{
writePaymentRequest(writer, registrant, amount, signature, ipaddress);
}
byte[] bytes = ms.ToArray();
ms.Close();
httpWebRequest.GetRequestStream().Write(bytes, 0, bytes.Length);
httpWebRequest.ContentLength = bytes.Length;
编辑#2
而不是XmlTextWriter(ms, System.Text.Encoding.UTF8)
,请尝试XmlTextWriter(ms, new UTF8Encoding(false))
,看看是否能解决编码问题