2010-02-01 34 views
2

Im卡住这个httpWebRequest问题。我需要将XML发送到一个网站。但是我一直对我的要求收到负面答复。我看到一些代码示例ContentLength设置...这可能是问题,但我不知道......Stream和XmlTextwriter ....请求没有正确接收

写在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(); 

回答

4

如果您先将XmlTextWriter写入类似于MemoryStream的东西,您将知道该长度。从那里,你可以得到的字节,httpWebRequest.ContentLength设置为字节数组的长度,然后将字节数组写入您的要求

编辑

你的代码看起来的中间像这样的(我认为):

编辑#2

而不是XmlTextWriter(ms, System.Text.Encoding.UTF8)

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; 

,尝试XmlTextWriter(ms, new UTF8Encoding(false))到看看是否可以解决编码问题

+0

这是行不通的。不幸的是它给出了同样的错误。我在请求的开始处看到了bytearray中的三个问号(转换为字符串)。这可能是什么? 这可能是一个简单的修复...连接工作,因为它给出了一个基于XML的错误消息。 – Rickjaah 2010-02-01 14:40:10

+0

听起来像一个编码问题...我会编辑我的答案,看看是否有帮助 – John 2010-02-01 14:48:18

+0

我刚刚对网站说了一句话......它说它只接收第一行....所以某处出了问题在推送请求... – Rickjaah 2010-02-01 14:53:09