C# POST XML(修正中文亂碼問題)
#region 發送xml文件給指定網址
/// <summary>
/// 發送xml文件給指定網址
/// </summary>
/// <param name="v_strURL">目標Url</param>
/// <param name="v_objXMLDoc">需要發送的數據(XmlDocument格式的)</param>
/// <returns>服務器響應</returns>
public static XmlDocument PostXMLTransaction(string v_strURL, XmlDocument v_objXMLDoc)
{
//set max enough to avoid http request is used out -> avoid dead while get response
ServicePointManager.DefaultConnectionLimit = 200;
XmlDocument XmlResponse = null;
HttpWebRequest req;
HttpWebResponse rep = null;
Stream reqStream = null;
//創建一個流對象(用來讀取響應對象的內容)
Stream repStream = null;
XmlTextReader objXmlReader;
//垃圾回收
System.GC.Collect();
req = (HttpWebRequest)WebRequest.Create(v_strURL);
try
{
# region Start HttpRequest
byte[] bytes;
//傳遞的值
bytes = Encoding.UTF8.GetBytes(v_objXMLDoc.InnerXml);
//傳遞的方法,必須要寫,而已Get必須大寫。
req.Method = "POST";
req.ContentLength = bytes.Length;
//表頭的格式必須要寫,否則請求響應的頁麵得不到要傳遞的值
req.ContentType = "text/xml;encoding='utf-8'";
//把傳遞的值寫到流中
reqStream = req.GetRequestStream();
reqStream.Write(bytes,0,bytes.Length);
//必須要關閉請求
reqStream.Close();
#endregion End HttpRequest
//創建一個響應對象,並從請求對象中得到響應對象的事例。
rep = (HttpWebResponse)req.GetResponse();//此時程序才開始向目標網頁發送Post請求
//rep = req.GetResponse() as HttpWebResponse;
#region Start HttpResponse
//HttpStatusCode.OK,指示請求成功,且請求的信息包含在響應中
if (rep.StatusCode == HttpStatusCode.OK)
{
//得到回應過來的流
repStream = rep.GetResponseStream();
//Load response stream into XMLReader
objXmlReader = new XmlTextReader(repStream);
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(objXmlReader);
XmlResponse = xmldoc;
objXmlReader.Close();
}
//響應關閉,要不會占用網絡資源
rep.Close();
#endregion
}
catch (WebException we)
{
//異常處理
}
catch (Exception ex)
{
//異常處理
}
finally
{
//關閉連接
reqStream.Close();
repStream.Close();
rep.Close();
//釋放對象
objXmlReader = null;
reqStream = null;
repStream = null;
rep = null;
//objHttpWebRequest = null;
if (req!= null)
{
req.Abort();
}
}
return XmlResponse;
}
#endregion
小注:
1、Content-Type:很多時候無法解析就是Content-Type的問題。如果本身就是xml文件,請跳過這一步
動態生成的XML一定要將其設置為text/xml,否則默認就是text/html也就是普通的文本了。
2、HttpWebRequest在初始化的時候要先根據url進行創建,然後再設置Method和ContentType,然後再將請求的內容寫進去,通過GetRequestStream來返回流,再向這個流中寫請求內容便可以了。再通過request對象的GetResponse方法返回response對象,最後得到返回的數據流,這是通過GetResponseStream方法返回的,最後從這個流中讀出返回的數據便ok了。
3、ServicePointManager.DefaultConnectionLimit Property:Gets or sets the maximum number of concurrent connections allowed by a ServicePoint object.
最後更新:2017-04-03 12:54:19