2

私はこのhttpWebRequestの問題で立ち往生しています。XMLをWebサイトに送信する必要があります。しかし、私は私の要求に対して否定的な反応を受け取り続けています。ContentLengthが設定されているコード例をいくつか見ました...それが問題になる可能性がありますが、わかりません...。

writePaymentRequest(...)で記述されたXMLは、Webサイトが必要とするものとまったく同じです。これは、別のプログラミング言語で、私のxmlマークアップを取得して成功したためです。結果には、私が受け取ることになっている情報ではなく、エラーのみが含まれています。

リクエストストリームを含むライターを作成するときに長さがわからないため、contentlengthを設定できません。

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

1 に答える 1

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))それでエンコーディングの問題が解決するかどうかを確認してください

于 2010-02-01T14:16:55.783 に答える