C#調(diào)用接口的四種方式介紹
在用C#調(diào)用接口的時(shí)候,遇到需要通過調(diào)用登錄接口才能調(diào)用其他的接口,因?yàn)樵谄渌慕涌谛枰诘卿浀臓顟B(tài)下保存Cookie值才能有權(quán)限調(diào)用,所以首先需要通過調(diào)用登錄接口來保存cookie值,再進(jìn)行其他接口的調(diào)用
1.通過Get方式
#region get方式 public string HttpGet(string url) { Encoding encoding = Encoding.UTF8; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; request.ContentType = "application/json"; request.Headers["Accept-Encoding"] = "gzip,deflase"; request.AutomaticDecompression = DecompressionMethods.GZip; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // HttpCookie cookies = new HttpCookie("admin"); //如果有需要通過登錄實(shí)現(xiàn)保存cookie值的話可以加一部分 // cookies.Value = Convert.ToString(response.Headers["Set-Cookie"]); // 通過響應(yīng)請(qǐng)求讀取帶cookie的http數(shù)據(jù) // cookies.Expires = DateTime.Now.AddDays(1); // HttpContext.Current.Response.Cookies.Add(cookies); using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { return reader.ReadToEnd(); } } #endregion
但是并不是所有的get請(qǐng)求都需要添加這個(gè)heard的內(nèi)容,有些加了這個(gè)可能出現(xiàn)亂碼的情況,所以不要設(shè)置Accept-Encoding的Header
此處之所以加此header,是因?yàn)榭吹骄W(wǎng)頁分析工具中所得到的瀏覽器瀏覽該網(wǎng)頁,對(duì)應(yīng)的http的header的內(nèi)容中,就是這樣設(shè)置的。
所以,代碼中,也是模擬瀏覽器去訪問網(wǎng)頁,就設(shè)置了對(duì)應(yīng)的Accept-Encoding為gzip,deflate了
普通瀏覽器訪問網(wǎng)頁,之所以添加:"Accept-Encoding" = "gzip,deflate"
那是因?yàn)?,瀏覽器對(duì)于從服務(wù)器中返回的對(duì)應(yīng)的gzip壓縮的網(wǎng)頁,會(huì)自動(dòng)解壓縮,所以,其request的時(shí)候,添加對(duì)應(yīng)的頭,表明自己接受壓縮后的數(shù)據(jù)。
同時(shí)添加了 request.AutomaticDecompression = DecompressionMethods.GZip;這一句,便可以獲得正確的數(shù)據(jù)。
如果你獲取網(wǎng)頁內(nèi)容太大的話,那么還是可以用這個(gè)辦法的,這樣就可以讓HttpWebRequest自動(dòng)幫你實(shí)現(xiàn)對(duì)應(yīng)的解壓縮了,可以減少數(shù)據(jù)數(shù)據(jù)傳輸量,節(jié)省時(shí)間,提高效率。
2.通過post方式
public string HttpPost2(string url, string body) { //把用戶傳過來的數(shù)據(jù)轉(zhuǎn)成“UTF-8”的字節(jié)流 Encoding encoding = Encoding.UTF8; //先根據(jù)用戶請(qǐng)求的uri構(gòu)造請(qǐng)求地址 //創(chuàng)建Web訪問對(duì)象 HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url); request.Method = "POST"; // request.Accept = "application/json"; request.ContentType = "application/json; charset=UTF-8"; request.Headers["Accept-Encoding"] = "gzip, deflate"; request.AutomaticDecompression = DecompressionMethods.GZip; //HttpCookie Cookie = System.Web.HttpContext.Current.Request.Cookies["admin"]; //若是需要登錄過后再能訪問獲取url的數(shù)據(jù),需要在請(qǐng)求頭中設(shè)置cookie值 //if (Cookie != null) // request.Headers.Add("Cookie", Cookie.Value.ToString()); byte[] buffer = encoding.GetBytes(body); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); //通過Web訪問對(duì)象獲取響應(yīng)內(nèi)容 HttpWebResponse response = (HttpWebResponse) request.GetResponse(); //通過響應(yīng)內(nèi)容流創(chuàng)建StreamReader對(duì)象,因?yàn)镾treamReader更高級(jí)更快 using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { return reader.ReadToEnd();//利用StreamReader就可以從響應(yīng)內(nèi)容從頭讀到尾 } }
3.通過put請(qǐng)求
#region Put請(qǐng)求 public string Put(string data, string uri) {//創(chuàng)建Web訪問對(duì)象 HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(uri); //把用戶傳過來的數(shù)據(jù)轉(zhuǎn)成“UTF-8”的字節(jié)流 byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data); Request.Method = "PUT"; Request.ContentLength = buf.Length; Request.ContentType = "application/json"; Request.MaximumAutomaticRedirections = 1; Request.AllowAutoRedirect = true; //發(fā)送請(qǐng)求 Stream stream = Request.GetRequestStream(); stream.Write(buf, 0, buf.Length); stream.Close(); //獲取接口返回值 //通過Web訪問對(duì)象獲取響應(yīng)內(nèi)容 HttpWebResponse Response = (HttpWebResponse)Request.GetResponse(); //通過響應(yīng)內(nèi)容流創(chuàng)建StreamReader對(duì)象,因?yàn)镾treamReader更高級(jí)更快 StreamReader reader = new StreamReader(Response.GetResponseStream(), Encoding.UTF8); //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有編碼問題就用這個(gè)方法 string returnXml = reader.ReadToEnd();//利用StreamReader就可以從響應(yīng)內(nèi)容從頭讀到尾 reader.Close(); Response.Close(); return returnXml; } #endregion
4.通過Delete請(qǐng)求
#region Delete請(qǐng)求 public string Delete(string data, string uri) { //創(chuàng)建Web訪問對(duì)象 HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(uri); //把用戶傳過來的數(shù)據(jù)轉(zhuǎn)成“UTF-8”的字節(jié)流 byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data); Request.Method = "DELETE"; Request.ContentLength = buf.Length; Request.ContentType = "application/json"; Request.MaximumAutomaticRedirections = 1; Request.AllowAutoRedirect = true; //發(fā)送請(qǐng)求 Stream stream = Request.GetRequestStream(); stream.Write(buf, 0, buf.Length); stream.Close(); //獲取接口返回值 //通過Web訪問對(duì)象獲取響應(yīng)內(nèi)容 HttpWebResponse Response = (HttpWebResponse)Request.GetResponse(); //通過響應(yīng)內(nèi)容流創(chuàng)建StreamReader對(duì)象,因?yàn)镾treamReader更高級(jí)更快 StreamReader reader = new StreamReader(Response.GetResponseStream(), Encoding.UTF8); //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有編碼問題就用這個(gè)方法 string returnXml = reader.ReadToEnd();//利用StreamReader就可以從響應(yīng)內(nèi)容從頭讀到尾 reader.Close(); Response.Close(); return returnXml; } #endregion
不同的場景需求,使用不同的方式,應(yīng)用在不同的場景 。
通過這幾種組合方式 ,可以調(diào)用http接口,完成調(diào)用和測試。
到此這篇關(guān)于C#調(diào)用接口的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C# 獲取動(dòng)態(tài)key的json對(duì)象的值案例
這篇文章主要介紹了C# 獲取動(dòng)態(tài)key的json對(duì)象的值案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01C#實(shí)現(xiàn)帶行數(shù)和標(biāo)尺的RichTextBox
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)帶行數(shù)和標(biāo)尺的RichTextBox,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12C#文件斷點(diǎn)續(xù)傳實(shí)現(xiàn)方法
這篇文章主要介紹了C#文件斷點(diǎn)續(xù)傳實(shí)現(xiàn)方法,涉及C#文件傳輸?shù)募记?具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08C# log4net 日志輸出的實(shí)現(xiàn)示例
本文主要介紹了C# log4net 日志輸出的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10unity實(shí)現(xiàn)弧形移動(dòng) 可角度自定
這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)弧形移動(dòng),可角度自定,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06客戶端實(shí)現(xiàn)藍(lán)牙接收(C#)知識(shí)總結(jié)
網(wǎng)上有關(guān)藍(lán)牙接收的資料很多,使用起來也很簡單,但是我覺得還是有必要把這些知識(shí)總結(jié)下來,藍(lán)牙開發(fā)需要用到一個(gè)第三方的庫InTheHand.Net.Personal.dll,感興趣的朋友可以了解下,或許對(duì)你有所幫助2013-02-02