【C#】知識共享 — 兩種GET/POST請求方法

本文介紹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);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

友情鏈接更多精彩內(nèi)容