1. 程式人生 > 實用技巧 >C# HTTP請求對外介面、第三方介面公用類

C# HTTP請求對外介面、第三方介面公用類

    /// <summary>
    /// 網路資料請求公共函式
    /// </summary>
    public class HttpWebRequestCommon
    {

        #region 根據HTTP協議請求介面,不攜帶引數
        /// <summary>
        /// 根據HTTP協議請求介面,不攜帶引數
        /// </summary>
        /// <param name="url">請求的第三方介面地址</param>
        /// <returns>介面返回的資料
</returns> public static string HttpRequest(string url) { //string returnData = null; string ret = string.Empty; try { HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(url); webReq.Method = "POST
"; webReq.ContentType = "application/json"; Stream postData = webReq.GetRequestStream(); postData.Close(); HttpWebResponse webResp = (HttpWebResponse)webReq.GetResponse(); StreamReader sr = new StreamReader(webResp.GetResponseStream(), Encoding.UTF8); ret
= sr.ReadToEnd(); } catch (Exception ex) { //LogManager.LogInstance.WriteLog("時間:" + DateTime.Now + "/n 請求出錯原因" + ex.ToString()); } return ret; } #endregion #region 根據HTTP協議請求第三方介面資料,攜帶引數方式在地址後使用佔位符拼接引數。傳遞格式請參照下個函式 /// <summary> /// 根據HTTP協議請求第三方介面資料,攜帶引數方式在地址後使用佔位符拼接引數 /// </summary> /// <param name="PostUrl">請求的第三方地址</param> /// <param name="postData">在地址後拼接的引數集合,傳遞格式請參照呼叫示範</param> /// <returns>介面返回的資料格式</returns> public static string HttpRequestUrl(string PostUrl, byte[] postData) { HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(PostUrl); myRequest.Method = "POST"; myRequest.ContentType = "application/x-www-form-urlencoded"; myRequest.ContentLength = postData.Length; Stream newStream = myRequest.GetRequestStream(); // Send the data. newStream.Write(postData, 0, postData.Length); newStream.Flush(); newStream.Close(); string msg = string.Empty; HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); if (myResponse.StatusCode == HttpStatusCode.OK) { StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); msg = reader.ReadToEnd(); } return msg; } #endregion #region 根據HTTP協議請求第三方介面資料,攜帶引數方式在地址後使用佔位符拼接引數。傳遞格式請參照下個函式 /// <summary> /// 根據HTTP協議請求第三方介面資料,攜帶引數方式在地址後使用佔位符拼接引數 /// </summary> /// <param name="PostUrl">請求的第三方地址</param> /// <param name="postData">在地址後拼接的引數集合,傳遞格式請參照呼叫示範</param> /// <returns>介面返回的資料格式</returns> public static string HttpRequestUrl(string PostUrl, byte[] postData, string POSTisGET) { HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(PostUrl); myRequest.Method = POSTisGET; myRequest.ContentType = "application/x-www-form-urlencoded"; myRequest.ContentLength = postData.Length; Stream newStream = myRequest.GetRequestStream(); // Send the data. newStream.Write(postData, 0, postData.Length); newStream.Flush(); newStream.Close(); string msg = string.Empty; HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); if (myResponse.StatusCode == HttpStatusCode.OK) { StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); msg = reader.ReadToEnd(); } return msg; } #endregion #region 上面HttpRequestUrl函式的呼叫示範,url存請求地址。引數通過字串佔位符拼接 //string url = "https://api.weixin.qq.com/cgi-bin/token"; //string postStrTpl = "grant_type=client_credential&appid={0}&secret={1}"; //UTF8Encoding encoding = new UTF8Encoding(); //byte[] postData = encoding.GetBytes(string.Format(postStrTpl, "引數一", "引數二")); //string retString = HttpWebRequestCommon.RequestUrl(url, postData); #endregion #region 根據HTTP協議請求第三方介面,攜帶XML引數 /// <summary> /// 根據HTTP協議請求第三方介面,攜帶XML引數 /// </summary> /// <param name="url">請求地址</param> /// <param name="data">攜帶的XML資料</param> /// <returns>介面返回的資料</returns> public static string HttpRequestXml(string url, string data) { //string returnData = null; string ret = string.Empty; try { byte[] buffer = Encoding.GetEncoding("UTF-8").GetBytes(data); HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(url); webReq.Method = "POST"; webReq.ContentType = "application/x-www-form-urlencoded"; webReq.ContentLength = buffer.Length; Stream postData = webReq.GetRequestStream(); postData.Write(buffer, 0, buffer.Length); postData.Close(); HttpWebResponse webResp = (HttpWebResponse)webReq.GetResponse(); StreamReader sr = new StreamReader(webResp.GetResponseStream(), Encoding.UTF8); ret = sr.ReadToEnd(); } catch (Exception ex) { //LogManager.LogInstance.WriteLog("時間:" + DateTime.Now + "/n 請求出錯原因" + ex.ToString()); } return ret; } #endregion #region 根據HTTP協議請求第三方介面,攜帶Json引數 /// <summary> /// 根據HTTP協議請求第三方介面,攜帶Json引數。 /// </summary> /// <param name="url">請求的第三方地址</param> /// <param name="content">Post提交資料內容(utf-8編碼的)</param> /// <returns>介面返回的資料</returns> public static string HttpRequestJson(string url, string content) { string result = ""; //ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, sslPolicyErrors) => true; //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.Method = "POST"; req.ContentType = "application/json"; #region 新增Post 引數 byte[] data = Encoding.UTF8.GetBytes(content); req.ContentLength = data.Length; using (Stream reqStream = req.GetRequestStream()) { reqStream.Write(data, 0, data.Length); reqStream.Close(); } #endregion HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); Stream stream = resp.GetResponseStream(); //獲取響應內容 using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { result = reader.ReadToEnd(); } return result; } #endregion }