Xml 来自 URL 的请求和响应
Xml Request and response from a URL
我正在尝试从接受 Xml 输入和 returns Xml 输出的 URL 获得响应。
还有这种情况,当这个 Url returns 错误请求 400 时,在这种情况下,在代码中我会得到一个异常,我无法查看 Xml,但如果我在邮递员中尝试相同的输入,我将得到 Xml 输出。
如果出现异常,我可以使用 WebException 捕获此异常,但最后我使用reader.ReadToEnd() 我会得到一个 JSON 而不是我从邮递员那里得到的 Xml 输出
邮递员输出示例:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<RESPONSE MODE="DIRECT" TYPE="PINPRINTING">
<RESULTMESSAGE>User not allowed to process</RESULTMESSAGE>
</RESPONSE>
这是我的代码:
public void GetResponse()
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myURL);
request.Accept = "application/xml";
byte[] requestInFormOfBytes = System.Text.Encoding.ASCII.GetBytes(requestXmlDoc.InnerXml);
request.Method = "POST";
request.ContentType = "text/xml;charset=utf-8";
request.ContentLength = requestInFormOfBytes.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(requestInFormOfBytes, 0, requestInFormOfBytes.Length);
requestStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader respStream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);
string receivedResponse = respStream.ReadToEnd();
}
catch (WebException e)
{
using (WebResponse response = e.Response)
{
HttpWebResponse httpResponse = (HttpWebResponse)response;
Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
using (Stream data = response.GetResponseStream())
using (var reader = new StreamReader(data, ASCIIEncoding.ASCII))
{
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
}
}
}
返回的JSON是这样的:
{
"status": 400,
"statusDesc": "Invalid input"
}
嘿,我发现答案是内容类型。
改变了:
request.ContentType = "text/xml;字符集=utf-8";
对此
request.ContentType = "application/xml";
现在我得到了我需要的Xml
我正在尝试从接受 Xml 输入和 returns Xml 输出的 URL 获得响应。
还有这种情况,当这个 Url returns 错误请求 400 时,在这种情况下,在代码中我会得到一个异常,我无法查看 Xml,但如果我在邮递员中尝试相同的输入,我将得到 Xml 输出。
如果出现异常,我可以使用 WebException 捕获此异常,但最后我使用reader.ReadToEnd() 我会得到一个 JSON 而不是我从邮递员那里得到的 Xml 输出
邮递员输出示例:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<RESPONSE MODE="DIRECT" TYPE="PINPRINTING">
<RESULTMESSAGE>User not allowed to process</RESULTMESSAGE>
</RESPONSE>
这是我的代码:
public void GetResponse()
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myURL);
request.Accept = "application/xml";
byte[] requestInFormOfBytes = System.Text.Encoding.ASCII.GetBytes(requestXmlDoc.InnerXml);
request.Method = "POST";
request.ContentType = "text/xml;charset=utf-8";
request.ContentLength = requestInFormOfBytes.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(requestInFormOfBytes, 0, requestInFormOfBytes.Length);
requestStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader respStream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);
string receivedResponse = respStream.ReadToEnd();
}
catch (WebException e)
{
using (WebResponse response = e.Response)
{
HttpWebResponse httpResponse = (HttpWebResponse)response;
Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
using (Stream data = response.GetResponseStream())
using (var reader = new StreamReader(data, ASCIIEncoding.ASCII))
{
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
}
}
}
返回的JSON是这样的:
{
"status": 400,
"statusDesc": "Invalid input"
}
嘿,我发现答案是内容类型。 改变了: request.ContentType = "text/xml;字符集=utf-8"; 对此 request.ContentType = "application/xml"; 现在我得到了我需要的Xml