天天看點

c#利用HttpWebRequest發送HTTP請求

調用第三方API的時候要用到HttpWebRequest類發送HTTP請求,網上查閱一番後大緻了解了該類的用法,現記錄如下。

首先引入HttpWebRequest類,System.IO類

using HttpWebRequest
using System.IO
           

GET請求

/// <summary>
        /// 發送GET請求
        /// </summary>
        /// <param name="url">請求URL,如果需要傳參,在URL末尾加上“?+參數名=參數值”即可</param>
        /// <returns></returns>        
        static string HttpGet(string url)
            {
            //建立
            HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
            //設定請求方法
            httpWebRequest.Method = "GET";
            //請求逾時時間
            httpWebRequest.Timeout = 20000;
            //發送請求
            HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            //利用Stream流讀取傳回資料
            StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8);
            //獲得最終資料,一般是json
            string responseContent = streamReader.ReadToEnd();

            streamReader.Close();
            httpWebResponse.Close();

            return responseContent;
        }
           

POST請求

/// <summary>
        /// 發送POST請求
        /// </summary>
        /// <param name="url">請求URL</param>
        /// <param name="data">請求參數</param>
        /// <returns></returns>
        static string HttpPost(string url, string data)
        {
            HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
            
            //字元串轉換為位元組碼
            byte[] bs = Encoding.UTF8.GetBytes(data);
            //參數類型,這裡是json類型
            //還有别的類型如"application/x-www-form-urlencoded",不過我沒用過(逃
            httpWebRequest.ContentType = "application/json";
            //參數資料長度
            httpWebRequest.ContentLength = bs.Length;
            //設定請求類型
            httpWebRequest.Method = "POST";
            //設定逾時時間
            httpWebRequest.Timeout = 20000;
            //将參數寫入請求位址中
            httpWebRequest.GetRequestStream().Write(bs, 0, bs.Length);

            //發送請求
            HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            //讀取傳回資料
            StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8);
            string responseContent = streamReader.ReadToEnd();

            streamReader.Close();
            httpWebResponse.Close();
            httpWebRequest.Abort();

            return responseContent;
        }
           

GET請求就很簡單易懂啦,如果需要傳參,在URL末尾加上“?+參數名=參數值”即可,需要注意的是POST請求。

POST請求參數類型有多個,設定不正确會發生錯誤的,一般第三方接口都是以JSON交換資料,按我上面那樣寫就沒錯了。請求中的參數設定涉及到了Stream流的一些知識點

httpWebRequest.GetRequestStream().Write(bs, 0, bs.Length);

這一行的意思是将“bs”從Request的“0”位置中開始寫入,長度為“bs.Length”,說白了就是把參數資料加入到請求資料中。