程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 修正中文亂碼問題後的C# POST XML

修正中文亂碼問題後的C# POST XML

編輯:關於C#
#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;  
    //創建一個流對象(用來讀取響應對象的內容) 
	//本文URL地址:http://www.bianceng.cn/Programming/csharp/201410/45571.htm 
    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.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved