C# 使用HTT傳送POST、GET請求
阿新 • • 發佈:2019-01-09
實習單位需要測試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的寫法可以獲取報錯之後伺服器的返回資料,如果伺服器返回錯誤碼和錯誤原因的話這樣是能獲取到的。