C#調(diào)用接口的四種方式介紹
在用C#調(diào)用接口的時(shí)候,遇到需要通過(guò)調(diào)用登錄接口才能調(diào)用其他的接口,因?yàn)樵谄渌慕涌谛枰诘卿浀臓顟B(tài)下保存Cookie值才能有權(quán)限調(diào)用,所以首先需要通過(guò)調(diào)用登錄接口來(lái)保存cookie值,再進(jìn)行其他接口的調(diào)用
1.通過(guò)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"); //如果有需要通過(guò)登錄實(shí)現(xiàn)保存cookie值的話可以加一部分
// cookies.Value = Convert.ToString(response.Headers["Set-Cookie"]); // 通過(guò)響應(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)頁(yè)分析工具中所得到的瀏覽器瀏覽該網(wǎng)頁(yè),對(duì)應(yīng)的http的header的內(nèi)容中,就是這樣設(shè)置的。
所以,代碼中,也是模擬瀏覽器去訪問(wèn)網(wǎng)頁(yè),就設(shè)置了對(duì)應(yīng)的Accept-Encoding為gzip,deflate了
普通瀏覽器訪問(wèn)網(wǎng)頁(yè),之所以添加:"Accept-Encoding" = "gzip,deflate"
那是因?yàn)椋瑸g覽器對(duì)于從服務(wù)器中返回的對(duì)應(yīng)的gzip壓縮的網(wǎng)頁(yè),會(huì)自動(dòng)解壓縮,所以,其request的時(shí)候,添加對(duì)應(yīng)的頭,表明自己接受壓縮后的數(shù)據(jù)。
同時(shí)添加了 request.AutomaticDecompression = DecompressionMethods.GZip;這一句,便可以獲得正確的數(shù)據(jù)。
如果你獲取網(wǎng)頁(yè)內(nèi)容太大的話,那么還是可以用這個(gè)辦法的,這樣就可以讓HttpWebRequest自動(dòng)幫你實(shí)現(xiàn)對(duì)應(yīng)的解壓縮了,可以減少數(shù)據(jù)數(shù)據(jù)傳輸量,節(jié)省時(shí)間,提高效率。
2.通過(guò)post方式
public string HttpPost2(string url, string body)
{
//把用戶傳過(guò)來(lái)的數(shù)據(jù)轉(zhuǎn)成“UTF-8”的字節(jié)流
Encoding encoding = Encoding.UTF8;
//先根據(jù)用戶請(qǐng)求的uri構(gòu)造請(qǐng)求地址
//創(chuàng)建Web訪問(wèn)對(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"]; //若是需要登錄過(guò)后再能訪問(wèn)獲取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);
//通過(guò)Web訪問(wèn)對(duì)象獲取響應(yīng)內(nèi)容
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
//通過(guò)響應(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.通過(guò)put請(qǐng)求
#region Put請(qǐng)求
public string Put(string data, string uri)
{//創(chuàng)建Web訪問(wèn)對(duì)象
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(uri);
//把用戶傳過(guò)來(lái)的數(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();
//獲取接口返回值
//通過(guò)Web訪問(wèn)對(duì)象獲取響應(yīng)內(nèi)容
HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
//通過(guò)響應(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());//如果有編碼問(wèn)題就用這個(gè)方法
string returnXml = reader.ReadToEnd();//利用StreamReader就可以從響應(yīng)內(nèi)容從頭讀到尾
reader.Close();
Response.Close();
return returnXml;
}
#endregion4.通過(guò)Delete請(qǐng)求
#region Delete請(qǐng)求
public string Delete(string data, string uri)
{
//創(chuàng)建Web訪問(wèn)對(duì)象
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(uri);
//把用戶傳過(guò)來(lái)的數(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();
//獲取接口返回值
//通過(guò)Web訪問(wèn)對(duì)象獲取響應(yīng)內(nèi)容
HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
//通過(guò)響應(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());//如果有編碼問(wèn)題就用這個(gè)方法
string returnXml = reader.ReadToEnd();//利用StreamReader就可以從響應(yīng)內(nèi)容從頭讀到尾
reader.Close();
Response.Close();
return returnXml;
}
#endregion不同的場(chǎng)景需求,使用不同的方式,應(yīng)用在不同的場(chǎng)景 。
通過(guò)這幾種組合方式 ,可以調(diào)用http接口,完成調(diào)用和測(cè)試。
到此這篇關(guān)于C#調(diào)用接口的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#代碼性能測(cè)試類(簡(jiǎn)單實(shí)用)
這篇文章主要介紹了C#代碼性能測(cè)試類(簡(jiǎn)單實(shí)用),本文直接給出實(shí)現(xiàn)代碼和使用示例,需要的朋友可以參考下2015-06-06
C#實(shí)現(xiàn)無(wú)限級(jí)聯(lián)下拉列表框
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)無(wú)限級(jí)聯(lián)下拉列表框的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-03-03
C#使用timer實(shí)現(xiàn)的簡(jiǎn)單鬧鐘程序
這篇文章主要介紹了C#使用timer實(shí)現(xiàn)的簡(jiǎn)單鬧鐘程序,涉及timer控件的使用及音頻文件的操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03
C#后臺(tái)調(diào)用前臺(tái)JS函數(shù)方法
今天小編就為大家分享一篇關(guān)于C#后臺(tái)調(diào)用前臺(tái)JS函數(shù)方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
C#中關(guān)于zip壓縮解壓幫助類的封裝 附源碼下載
之前一個(gè)同學(xué)問(wèn)了這個(gè)問(wèn)題后,看了園子里其它園友的封裝,都很零碎,調(diào)用也不是很方便。所以自己就封裝了一個(gè)zip解壓的類。后來(lái)想整理下怕自己忘了。就把壓縮的類也一并封裝了2013-02-02
C#使用windows服務(wù)開(kāi)啟應(yīng)用程序的方法
這篇文章主要介紹了C#使用windows服務(wù)開(kāi)啟應(yīng)用程序的方法,實(shí)例分析了C#操作windows服務(wù)開(kāi)啟應(yīng)用程序所遇到的問(wèn)題及相關(guān)解決技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
關(guān)于C#繼承的簡(jiǎn)單應(yīng)用代碼分析
在本篇文章里小編給大家整理了一篇關(guān)于C#繼承的簡(jiǎn)單應(yīng)用代碼分析內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-05-05

