【Github源碼】
《上一篇》 介紹了Xmtool工具庫中的XML操作類庫,今天我們繼續(xù)為大家介紹其中的HTTP請求類庫。
在現(xiàn)如今的軟件需求場景中,HTTP網(wǎng)絡(luò)請求幾乎是開發(fā)過程中必然會使用的功能;而系統(tǒng)自帶的HTTPClient對象使用起來并不是那么容易和友好,因此我們對其進(jìn)行了二次封裝成了一個Web類庫。
該Web類庫提供了HTTP請求和HTTP安全相關(guān)兩方面的封裝。HTTP請求是基于系統(tǒng)自帶的HttpClient對象進(jìn)行了二次封裝,提供了更易用的方法,并且對Json類型更加友好;HTTP安全方面主要針對XSS攻擊提供了字符處理方法,后續(xù)會根據(jù)需要不斷添加。
HTTP請求
使用HTTP請求,首選需要獲取HttpClientExt對象:
HttpClientExt client = Xmtool.Web.Client();
// 或者
HttpClientExt client = Xmtool.Web.Client("microservice-1");
根據(jù)獲取Client時傳入的參數(shù)不同,系統(tǒng)將返回不同的實例;但對相同的參數(shù)會做單例處理,也就是說相同的參數(shù)將獲取到同一個實例;當(dāng)不傳入任何參數(shù)時,每次都會返回一個全新的實例。
根據(jù)HTTP常用請求場景類庫提供了各種屬性和方法:
Timeout屬性
BaseAddress屬性
AddDefaultHeader方法
AddRequestHeader方法
AddRequestHeaderWithoutValidation方法
SetContent方法
SetJsonContent方法
SetJsonContent方法二
Clear方法
Get方法
GetAsync方法
Post方法
PostAsync方法
Put方法
PutAsync方法
Delete方法
DeleteAsync方法
Patch方法
PatchAsync方法
Head方法
HeadAsync方法
Options方法
OptionsAsync方法
1. Timeout屬性
說明:用來設(shè)置或獲取HTTP請求的超時時間。
2. BaseAddress屬性
說明: 用來設(shè)置或獲取HTTP請求的基本地址,在后續(xù)使用相對地址發(fā)送請求時會使用該地址進(jìn)行拼接。
3. AddDefaultHeader方法
public HttpClientExt AddDefaultHeader(string name, string value)
說明:為HTTP請求設(shè)置請求頭信息,該頭信息會在實例每次發(fā)起請求時攜帶。
參數(shù):
name:請求頭名稱。
value:請求頭內(nèi)容。
HttpClientExt client = Xmtool.Web.Client();
client.AddDefaultHeader("User", "admin");
4. AddRequestHeader方法
public HttpClientExt AddRequestHeader(string name, string value)
說明:為HTTP請求設(shè)置請求頭信息,該頭信息僅會在實例下一次發(fā)起請求時攜帶。
參數(shù):
name:請求頭名稱。
value:請求頭內(nèi)容。
5. AddRequestHeaderWithoutValidation方法
public HttpClientExt AddRequestHeaderWithoutValidation(string name, string value)
說明:為HTTP請求設(shè)置請求頭信息,該頭信息僅會在實例下一次發(fā)起請求時攜帶;該方法和AddRequestHeader的區(qū)別是不會對參數(shù)的合法性進(jìn)行檢查。
參數(shù):
name:請求頭名稱。
value:請求頭內(nèi)容。
6. SetContent方法
public HttpClientExt SetContent(string content)
說明:為下一次HTTP請求(主要是提交類請求,如Post)設(shè)置提交內(nèi)容。
參數(shù):
content:請求提交內(nèi)容。
HttpClientExt client = Xmtool.Web.Client();
client.SetContnent("Good Day");
// TODO
7. SetJsonContent方法
public HttpClientExt SetJsonContent(string content)
說明:為下一次請求設(shè)置提交內(nèi)容,必須是JSON格式。
參數(shù):
content:請求提交內(nèi)容,JSON格式。
HttpClientExt client = Xmtool.Web.Client();
client.SetJsonContnent("{\"Author\": \"softwaiter\"}");
// TODO
8. SetJsonContent方法二
public HttpClientExt SetJsonContent(DynamicObjectExt obj)
說明:通過動態(tài)對象為下一次請求設(shè)置JSON格式的提交內(nèi)容。
參數(shù):
obj:要提交的動態(tài)對象。
DynamicObjectExt obj = new DynamicObjectExt();
obj.Author = "softwaier";
HttpClientExt client = Xmtool.Web.Client();
client.SetJsonContnent(obj);
// TODO
9. Clear方法
public HttpClientExt Clear()
說明:清除僅在下一次請求中生效的提交內(nèi)容和請求頭信息。
10. Get方法
public HttpResponseExt Get(string requestUri)
說明:以Get方式發(fā)起一個HTTP請求。
參數(shù):
requestUri:HTTP請求地址,可以是相對地址或絕對地址;如果是相對地址將使用BaseAddress進(jìn)行拼接。
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.Get("https://www.baidu.com");
// TODO
11. GetAsync方法
public async Task<HttpResponseExt> GetAsync(string requestUri)
說明:Get方法的異步版本。
12. Post方法
public HttpResponseExt Post(string requestUri)
說明:以Post方式發(fā)起一個HTTP請求。
參數(shù):
requestUri:HTTP請求地址,可以是相對地址或絕對地址;如果是相對地址將使用BaseAddress進(jìn)行拼接。
// 新增一條人員信息
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.SetJsonContent("{\"user\": \"admin", \"password\": \"Admin123\"}")
.Post("https://www.ceshi.com/person");
// TODO
13. PostAsync方法
public async Task<HttpResponseExt> PostAsync(string requestUri)
說明:Post方法的異步版本。
14. Put方法
public HttpResponseExt Put(string requestUri)
說明:以Put方式發(fā)起一個HTTP請求。
參數(shù):
requestUri:HTTP請求地址,可以是相對地址或絕對地址;如果是相對地址將使用BaseAddress進(jìn)行拼接。
// 修改Id為1的人員住址
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.SetJsonContent("{\"address\": \"BeiJing\"}")
.Put("https://www.ceshi.com/person/1");
// TODO
15. PutAsync方法
public async Task<HttpResponseExt> PutAsync(string requestUri)
說明:Put方法的異步版本。
16. Delete方法
public HttpResponseExt Delete(string requestUri)
說明:以Delete方式發(fā)起一個HTTP請求。
參數(shù):
requestUri:HTTP請求地址,可以是相對地址或絕對地址;如果是相對地址將使用BaseAddress進(jìn)行拼接。
// 刪除Id為1的人員信息
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.Delete("https://www.ceshi.com/person/1");
// TODO
17. DeleteAsync方法
public async Task<HttpResponseExt> DeleteAsync(string requestUri)
說明:Delete方法的異步版本。
18. Patch方法
public HttpResponseExt Patch(string requestUri)
說明:以Patch方式發(fā)起一個HTTP請求。
參數(shù):
requestUri:HTTP請求地址,可以是相對地址或絕對地址;如果是相對地址將使用BaseAddress進(jìn)行拼接。
// 修改Id為1的人員信息
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.SetJsonContent("{\"name\":\"wangxm\", \"age\": 18}")
.Delete("https://www.ceshi.com/person/1");
// TODO
19. PatchAsync方法
public async Task<HttpResponseExt> PatchAsync(string requestUri)
說明:Patch方法的異步版本。
20. Head方法
public HttpResponseExt Head(string requestUri)
說明:以Head方式發(fā)起一個HTTP請求。
參數(shù):
requestUri:HTTP請求地址,可以是相對地址或絕對地址;如果是相對地址將使用BaseAddress進(jìn)行拼接。
21. HeadAsync方法
public async Task<HttpResponseExt> HeadAsync(string requestUri)
說明:Head方法的異步版本。
22. Options方法
public HttpResponseExt Options(string requestUri)
說明:以O(shè)ptions方式發(fā)起一個HTTP請求。
參數(shù):
requestUri:HTTP請求地址,可以是相對地址或絕對地址;如果是相對地址將使用BaseAddress進(jìn)行拼接。
23. OptionsAsync方法
public async Task<HttpResponseExt> OptionsAsync(string requestUri)
說明:Options方法的異步版本。
HTTP安全
HTTP安全在類庫中目前僅提供了一個應(yīng)對XSS攻擊的處理方法,該方法會對傳入?yún)?shù)進(jìn)行二次,將內(nèi)容中有風(fēng)險部分進(jìn)行處理并返回。
使用時需要首先獲取HttpSecurity對象:
HttpSecurity security = Xmtool.Web.Security();
Xss方法
1. Xss方法
public string Xss(string str)
說明:對指定字符內(nèi)容進(jìn)行Xss風(fēng)險處理并返回處理結(jié)果。
參數(shù):
str:需要進(jìn)行處理的字符串內(nèi)容。
string str = "<script>alert(123);</script><div>hello world.</div>";
string str2 = Xmtool.Web.Security().Xss(str);
Console.Writeline(str2); // 輸出<div>hello world.</div>
//TODO
附加說明
一、DynamicObjectExt對象
說明:DynamicObjectExt動態(tài)對象是Xmtool工具庫中最具特色的一項功能;通過該對象可以無需事先定義就能像使用實體類一樣進(jìn)行數(shù)據(jù)對象的賦值和操作;且比系統(tǒng)自帶的dynamic對象更加靈活友好。如果你熟悉Javascript的話,它就像Javascript中的變量一樣可以任意使用;更加詳細(xì)的說明請參考《DynamicObjectExt詳細(xì)說明》。
二、HttpResponseExt對象
HttpResponseExt對象用于接收HTTP請求返回結(jié)果,封裝了響應(yīng)碼、響應(yīng)頭、響應(yīng)內(nèi)容 3 部分內(nèi)容。
StatusCode屬性
Headers屬性
Content屬性
Json屬性文章來源:http://www.zghlxwxcb.cn/news/detail-641188.html
Xml屬性文章來源地址http://www.zghlxwxcb.cn/news/detail-641188.html
1. StatusCode屬性
說明:HTTP請求的響應(yīng)狀態(tài)碼。
2. Headers屬性
說明:HTTP請求的響應(yīng)頭信息。
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt resp = client.Get("https://www.baidu.com");
if (resp.Headers.ContainsKey("user"))
{
string user = resp.Headers["user"];
// TODO
}
3. Content屬性
說明:HTTP請求的響應(yīng)內(nèi)容。
4. Json屬性
說明:HTTP請求返回的JSON格式的內(nèi)容;如果返回內(nèi)容不是合法的JSON格式,將返回異常。
// https://www.ceshi.com/person/1 請求返回內(nèi)容
{
"Name": "softwaiter",
"Age": 18,
"Address": "BeiJing"
}
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt resp = client.Get("https://www.ceshi.com/person/1");
if (resp.Json.Name == "softwaiter")
{
// TODO
}
5. Xml屬性
說明:HTTP請求返回的XML格式的內(nèi)容;如果返回內(nèi)容不是合法的XML格式,將返回異常。
【Github源碼】
到了這里,關(guān)于開源.NetCore通用工具庫Xmtool使用連載 - HTTP請求篇的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!