1. 程式人生 > >C# 使用HTT傳送POST、GET請求

C# 使用HTT傳送POST、GET請求

實習單位需要測試c#與單位某軟體的對接情況,讓我負責c#通過HTTP傳送POST、GET請求

C# POST、GET請求主要涉及兩個類HttpWebRequest和HttpWebResponse,前者用來寫入資料,後者用來接收返回資料

程式碼如下:

POST:
 public string putMessage(string message)
        {
            try
            {
                string Url = "";//自己指定URL
                HttpWebRequest request =
(HttpWebRequest)WebRequest.Create(Url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = Encoding.UTF8.GetByteCount(message); Stream myRequestStream = request.GetRequestStream()
; StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312")); myStreamWriter.Write(message); myStreamWriter.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); return
response.Server + " " + response.Method + " " + response.StatusDescription; } catch (WebException ex) { var error = (HttpWebResponse)ex.Response; Stream myResponseStream = error.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; } }

由於需求不需要接收POST返回,所以沒有讀取POST返回的流,如果要讀取POST返回的流,參考程式碼如下

 public string putMessage(string message)
        {
            try
            {
                string Url = "http://" + IP_PORT + "/cmsp/message?token=" + TOKEN + "&topic=" + TOPIC_NAME;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";// 指定提交資料型別
                request.ContentLength = Encoding.UTF8.GetByteCount(message);
                Stream myRequestStream = request.GetRequestStream();
                StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
                myStreamWriter.Write(message);
                myStreamWriter.Close();
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream myResponseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                string retString = myStreamReader.ReadToEnd();
                myStreamReader.Close();
                myResponseStream.Close();
                return retString;
            }
            catch (WebException ex)
            {
                var error = (HttpWebResponse)ex.Response;
                Stream myResponseStream = error.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                string retString = myStreamReader.ReadToEnd();
                myStreamReader.Close();
                myResponseStream.Close();
                return retString;
            }
        }
GET:
 public string getMessage()
        {
            try
            {
                string Url = "";//自己指定URL
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                request.Method = "GET";
                request.ContentType = "text/json;charset=UTF-8";
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream myResponseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                string retString = myStreamReader.ReadToEnd();
                myStreamReader.Close();
                myResponseStream.Close();
                return retString;
            }
            catch (WebException ex)
            {
                var error = (HttpWebResponse)ex.Response;
                Stream myResponseStream = error.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                string retString = myStreamReader.ReadToEnd();
                myStreamReader.Close();
                myResponseStream.Close();
                return retString;
            }           
        }

這種catch的寫法可以獲取報錯之後伺服器的返回資料,如果伺服器返回錯誤碼和錯誤原因的話這樣是能獲取到的。

參考資料

  1. HttpRequest中常見的四種ContentType【轉載】
  2. C# 之 HttpWebResponse類
  3. C#傳送和接收HTTP請求