首先,我是一个WEB NOOB。这可能解释了这个问题。无论如何,当我使用网页测试应用程序将 xml 发布到 url 时,一切正常。这是来自网页的相关代码(我认为):
<form action="/gateway/xml" method="post" id="xml-test-form">
<textarea name="data">
{some xml is in here}
</textarea>
<input type="submit" value="Submit Test" />
</form>
当我尝试使用内容类型为(“text/xml”或“application/x-www-form-urlencoded”)且缓冲区编码(ASCII 或 UTF8)的 C#(WebRequest 或 HttpWebRequest)提交完全相同的 XML 时,我得到暗示另一端根本无法读取 XML 的错误。这是错误:
<?xml version="1.0"?>
<SubmitOrdersResponse>
<status code="0">FAILURE</status>
<errors>
<error code="1001">Invalid XML Version</error>
</errors>
</SubmitOrdersResponse>
<br /><b>Warning</b>: DOMDocument::loadXML() [<a href='domdocument.loadxml'>domdocument.loadxml</a>]: Empty string supplied as input in <b>/var/www/vhosts/reports.gogetagrip.com/httpdocs/application/models/Gateway.php</b> on line <b>90</b><br />
我可以通过删除名为 . 我认为这是检查的第一个元素,因此是“INVALID XML VERSION”错误。我认为正在发生的事情是我的提交内容以错误的格式出现,并且无法读取该元素。我认为特别是我必须模拟一个发布数据,其中我的数据来自“数据”表单字段(见上文)。我不知道如何使用 WebRequest 类来设置它,所以我无法测试它。这是我的代码:
static private void Post(string sURL, string sXml) {
try {
//Our postvars
byte[] buffer = Encoding.UTF8.GetBytes(sXml); // Tried ASCII...same result
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(sURL); // Tried WebRequest ... same result
WebReq.Method = "POST";
WebReq.ContentType = "application/x-www-form-urlencoded"; // tried "text/xml"... same result
WebReq.ContentLength = buffer.Length;
Stream ReqStream = WebReq.GetRequestStream();
ReqStream.Write(buffer, 0, buffer.Length);
ReqStream.Close();
WebResponse WebRes = WebReq.GetResponse();
//Console.WriteLine(WebResp.StatusCode);
//Console.WriteLine(WebResp.Server);
Stream ResStream = WebRes.GetResponseStream();
StreamReader ResReader = new StreamReader(ResStream);
string sResponse = ResReader.ReadToEnd();
} catch (Exception ex) {
} finally {
}
}
有任何想法吗?????