本文介紹C#最常用的兩種發(fā)送GET/POST請求方式。
HttpWebRequest方法
GET請求
internal static string Get(string url)
{
string result = string.Empty;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET";
req.ContentType = "application/x-www-form-urlencoded";
// req.ProtocolVersion = HttpVersion.Version10;
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
// 獲取響應(yīng)內(nèi)容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
return result;
}
POST請求
internal static string Post(string url, string content)
{
string result = string.Empty;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
// req.ProtocolVersion = HttpVersion.Version10;
byte[] data = Encoding.UTF8.GetBytes(content);
req.ContentLength = data.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
// 獲取響應(yīng)內(nèi)容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
return result;
}
下面將介紹一種相比 HttpWebRequest 而言更先進(jìn)的請求方法。
HttpClient方法
GET請求
internal async static Task<string> Get(string url)
{
HttpClient httpClient = new HttpClient();
var resp = await httpClient.GetAsync(url);
string result = string.Empty;
if (resp.StatusCode == HttpStatusCode.OK)
{
result = await resp.Content.ReadAsStringAsync();
}
return result;
}
POST請求
internal async static Task<string> Post(string url, List<KeyValuePair<string, string>> data)
{
HttpClient httpClient = new HttpClient();
var content = new FormUrlEncodedContent(data);
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");
var resp = await httpClient.PostAsync(url, content);
string result = string.Empty;
if (resp.StatusCode == HttpStatusCode.OK)
{
result = await resp.Content.ReadAsStringAsync();
}
return result;
}
相比起上面兩種請求方式,HttpClient還有一種比較好的寫法。
internal async static Task<string> Request(string url, List<KeyValuePair<string, string>> data)
{
HttpClient httpClient = new HttpClient();
var content = new FormUrlEncodedContent(data);
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");
var requestMessage = new HttpRequestMessage
{
Version = HttpVersion.Version10,
Method = HttpMethod.Post,
RequestUri = new Uri(url),
Content = content
};
var resp = await httpClient.SendAsync(requestMessage);
string result = string.Empty;
if (resp.StatusCode == HttpStatusCode.OK)
{
result = await resp.Content.ReadAsStringAsync();
}
return result;
}
這個(gè)方法只需修改HttpMethod就能實(shí)現(xiàn)發(fā)送GET請求或發(fā)送POST請求。
調(diào)用方法參考代碼如下
var data = new List<KeyValuePair<string, string>>();
data.Add(new KeyValuePair("key", "value"));
string result = await Request.Post(url, data);
Console.WriteLine(result);