2010-02-01 5 views
2

Я застрял в этой проблеме httpWebRequest. Мне нужно отправить XML на сайт. Но я по-прежнему получаю отрицательные ответы по моей просьбе. Я видел примеры кода, где была установлена ​​ContentLength ... И это может быть проблемой, но я не знаю ....Поток и XmlTextwriter .... Запрос получен неверно

XML, написанный в writePaymentRequest (...), точно так же, как это необходимо веб-сайту потому что они получили мою разметку 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 длине массива байт, а затем записать массив байтов на запрос

редактировать

Середина кода будет выглядеть примерно как это (я думаю):

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)) к см., если это исправляет проблему кодирования

+0

Это не работает. К сожалению, это дает ту же ошибку. Я вижу три вопросительных знака в bytearray (преобразованный в строку) в начале запроса. Может ли это быть чем-то? Это, вероятно, простое исправление ... Соединение работает, потому что оно дает сообщение об ошибке на основе XML. – Rickjaah

+0

Звучит как проблема с кодировкой ... Я отредактирую свой ответ, чтобы узнать, помогает ли это – John

+0

Я только что получил слово с веб-сайтом ... Он говорит, что он получает только первую строку ... так что где-то что-то идет не так при нажатии запроса ... – Rickjaah

Смежные вопросы