I
Ireney Berezniak
Hi, I am trying to send an UTF-8 XML string to remote resource via
HttpWebRequest using POST method, which means that I need to get the
request stream and write my XML string to it. No problems here.
The problem that I'm running into is that the "+" sign that one of the
XML elements contains is lost somehow in the transaction. I verified
that the "+" is actually in the XML string prior to getting bytes, and
writing to stream:
byte[] data;
UTF8Encoding encoding = new UTF8Encoding();
data = encoding.GetBytes(formData) //formData is a string containg XML
//here request is created
....
//now add the form data to the request
//first, get the request stream
Stream stream = request.GetRequestStream();
//write data to the stream
stream.Write(data, 0, data.Length);
Any ideas why the "+" sign is lost? If I convert the byte array (data)
back into string, the "+" is there. The remote resource does not get
it, however.
If I send the same XML via reqular web form post, rather than using the
server-side HttpWebRequest call, everything works fine. This leads me
to believe that I am not doing something properly as far as encoding is
concerned. I would appreciate any pointers.
This is how the XML is constructed. I'm concatonating the string
essentially, inserting data I collected from web from into placeholders
at later time.
private string GetXMLRequest()
{
string xml = String.Empty;
xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
xml += "<TranxRequest>";
xml += "<MerchantNumber>{0}</MerchantNumber>";
xml += "<Products>{1}</Products>";
xml += "<xxxName>{2}</xxxName>";
xml += "<xxxCompany>{3}</xxxCompany>";
xml += "<xxxAddress>{4}</xxxAddress>";
xml += "<xxxCity>{5}</xxxCity>";
xml += "<xxxProvince>{6}</xxxProvince>";
xml += "<xxxPostal>{7}</xxxPostal>";
xml += "<xxxCountry>{8}</xxxCountry>";
xml += "<xxxPhone>{9}</xxxPhone>";
xml += "<xxxEmail>{10}</xxxEmail>";
xml += "<xxxCard_Number>{11}</xxxCard_Number>";
xml += "<xxxCCMonth>{12}</xxxCCMonth>";
xml += "<xxxCCYear>{13}</xxxCCYear>";
xml += "<CVV2Indicator>{14}</CVV2Indicator>";
xml += "<CVV2>{15}</CVV2>";
xml += "<xxxShippingName>{16}</xxxShippingName>";
xml += "<xxxShippingCompany>{17}</xxxShippingCompany>";
xml += "<xxxShippingAddress>{18}</xxxShippingAddress>";
xml += "<xxxShippingCity>{19}</xxxShippingCity>";
xml += "<xxxShippingPostal>{20}</xxxShippingPostal>";
xml += "<xxxShippingCountry>{21}</xxxShippingCountry>";
xml += "<xxxShippingPhone>{22}</xxxShippingPhone>";
xml += "<xxxShippingEmail>{23}</xxxShippingEmail>";
xml += "</TranxRequest>";
return xml;
}
ib.
HttpWebRequest using POST method, which means that I need to get the
request stream and write my XML string to it. No problems here.
The problem that I'm running into is that the "+" sign that one of the
XML elements contains is lost somehow in the transaction. I verified
that the "+" is actually in the XML string prior to getting bytes, and
writing to stream:
byte[] data;
UTF8Encoding encoding = new UTF8Encoding();
data = encoding.GetBytes(formData) //formData is a string containg XML
//here request is created
....
//now add the form data to the request
//first, get the request stream
Stream stream = request.GetRequestStream();
//write data to the stream
stream.Write(data, 0, data.Length);
Any ideas why the "+" sign is lost? If I convert the byte array (data)
back into string, the "+" is there. The remote resource does not get
it, however.
If I send the same XML via reqular web form post, rather than using the
server-side HttpWebRequest call, everything works fine. This leads me
to believe that I am not doing something properly as far as encoding is
concerned. I would appreciate any pointers.
This is how the XML is constructed. I'm concatonating the string
essentially, inserting data I collected from web from into placeholders
at later time.
private string GetXMLRequest()
{
string xml = String.Empty;
xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
xml += "<TranxRequest>";
xml += "<MerchantNumber>{0}</MerchantNumber>";
xml += "<Products>{1}</Products>";
xml += "<xxxName>{2}</xxxName>";
xml += "<xxxCompany>{3}</xxxCompany>";
xml += "<xxxAddress>{4}</xxxAddress>";
xml += "<xxxCity>{5}</xxxCity>";
xml += "<xxxProvince>{6}</xxxProvince>";
xml += "<xxxPostal>{7}</xxxPostal>";
xml += "<xxxCountry>{8}</xxxCountry>";
xml += "<xxxPhone>{9}</xxxPhone>";
xml += "<xxxEmail>{10}</xxxEmail>";
xml += "<xxxCard_Number>{11}</xxxCard_Number>";
xml += "<xxxCCMonth>{12}</xxxCCMonth>";
xml += "<xxxCCYear>{13}</xxxCCYear>";
xml += "<CVV2Indicator>{14}</CVV2Indicator>";
xml += "<CVV2>{15}</CVV2>";
xml += "<xxxShippingName>{16}</xxxShippingName>";
xml += "<xxxShippingCompany>{17}</xxxShippingCompany>";
xml += "<xxxShippingAddress>{18}</xxxShippingAddress>";
xml += "<xxxShippingCity>{19}</xxxShippingCity>";
xml += "<xxxShippingPostal>{20}</xxxShippingPostal>";
xml += "<xxxShippingCountry>{21}</xxxShippingCountry>";
xml += "<xxxShippingPhone>{22}</xxxShippingPhone>";
xml += "<xxxShippingEmail>{23}</xxxShippingEmail>";
xml += "</TranxRequest>";
return xml;
}
ib.