Pergunta

Estou preso a esse problema httpwebrequest. Preciso enviar XML para um site. Mas continuo recebendo respostas negativas no meu pedido. Vi alguns exemplos de código em que o comprimento do conteúdo foi definido ... e esse pode ser o problema, mas eu não sei ....

O XML escrito no WritePaymentRequest (...) é exatamente como o site precisa, porque eles receberam minha marcação XML e eles conseguiram, em outra linguagem de programação. O resultado contém apenas o erro deles em vez das informações que devo estar recebendo.

Não posso definir o contentLength porque não conheço o comprimento quando crio o escritor com o requeststream nele.

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();
Foi útil?

Solução

Você saberia o comprimento se escrevesse o XMLTextWriter para algo como um MemoryStream primeiro. A partir daí, você pode obter os bytes, definir o httpwebrequest.contentlength para o comprimento da matriz de bytes e depois escreva a matriz de byte para sua solicitação

editar

O meio do seu código seria algo assim (eu acho):

    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;

Editar #2

Ao invés de XmlTextWriter(ms, System.Text.Encoding.UTF8), tentar XmlTextWriter(ms, new UTF8Encoding(false)) Para ver se isso corrige o problema de codificação

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top