Frage

Ich stecke bei diesem httpWebRequest-Problem fest.Ich muss XML an eine Website senden.Aber ich bekomme immer wieder negative Antworten auf meine Anfrage.Ich habe einige Codebeispiele gesehen, in denen ContentLength festgelegt wurde ...Und das könnte das Problem sein, aber ich weiß es nicht ...

Das in writePaymentRequest(...) geschriebene XML ist genau so, wie es die Website braucht, weil sie mein XML-Markup erhalten haben und es ihnen gelungen ist, allerdings in einer anderen Programmiersprache.Das Ergebnis enthält nur ihren Fehler und nicht die Informationen, die ich erhalten sollte.

Ich kann die Inhaltslänge nicht festlegen, da ich die Länge nicht kenne, wenn ich den Writer mit dem Requeststream darin erstelle.

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();
War es hilfreich?

Lösung

Sie würden die Länge kennen, wenn Sie den XmlTextWriter zuerst in etwas wie einen MemoryStream schreiben würden.Von dort aus könnten Sie die Bytes abrufen, httpWebRequest.ContentLength auf die Länge des Byte-Arrays setzen und dann das Byte-Array in Ihre Anfrage schreiben

bearbeiten

Die Mitte Ihres Codes würde ungefähr so ​​aussehen (glaube ich):

    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;

Bearbeiten Sie #2

Anstatt XmlTextWriter(ms, System.Text.Encoding.UTF8), versuchen XmlTextWriter(ms, new UTF8Encoding(false)) um zu sehen, ob das Codierungsproblem dadurch behoben wird

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top