Stream и XmlTextwriter .... Запрос получен неправильно - PullRequest
2 голосов
/ 01 февраля 2010

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

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

1 Ответ

4 голосов
/ 01 февраля 2010

Вы бы знали длину, если бы сначала записали 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;

edit # 2

Вместо XmlTextWriter(ms, System.Text.Encoding.UTF8), попробуйте XmlTextWriter(ms, new UTF8Encoding(false)), чтобы увидеть, решает ли это проблему кодировки

...