C#之HttpClient設(shè)置cookies的兩種方式
前言
最近公司使用HttpClient對(duì)象在發(fā)送請(qǐng)求,拋棄了之前的HttpWebRequest,使用httpClient有個(gè)好處:就是可以只使用一個(gè)HttpClient的實(shí)例,去完成發(fā)送所有的請(qǐng)求數(shù)據(jù)(地址,請(qǐng)求數(shù)據(jù),類型,Cookie等)。
而傳統(tǒng)的HttpWebRequest每次請(qǐng)求需要?jiǎng)?chuàng)建一個(gè)單獨(dú)的實(shí)例,且規(guī)避了一個(gè)老問(wèn)題:Socket 連接釋放不及時(shí)的問(wèn)題。
下面的是轉(zhuǎn)發(fā)其他道友的文章,主要是在使用的過(guò)程中,自身需要發(fā)送一個(gè)自定義的Cookie到目標(biāo)服務(wù)器,但是死活發(fā)送不過(guò)去,最后百度其他道友的文章發(fā)現(xiàn)如果需要發(fā)送自己的Cookie,需要做一個(gè)設(shè)置:
var handler = new HttpClientHandler() { UseCookies = false}; var client = new HttpClient(handler);// { BaseAddress = baseAddress };
一般有兩種辦法
第一種
handler.UseCookies=true(默認(rèn)為true),默認(rèn)的會(huì)自己帶上cookies
例如:
var handler = new HttpClientHandler() { UseCookies = true }; var client = new HttpClient(handler);// { BaseAddress = baseAddress }; client.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0"); client.DefaultRequestHeaders.Add("Connection", "Keep-Alive"); client.DefaultRequestHeaders.Add("Keep-Alive", "timeout=600"); var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("email", "xxxx"), new KeyValuePair<string, string>("password", "xxxx"), }); var result = await client.PostAsync("https://www.xxxx.com/cp/login", content); result.EnsureSuccessStatusCode();
這種情況post請(qǐng)求登陸成功后,重定向到別的頁(yè)面,也會(huì)自動(dòng)帶上cookies。
如果把handler.UseCookies設(shè)置為false,登陸后重定向的話不會(huì)自動(dòng)帶上cookies,則又會(huì)跳轉(zhuǎn)到登陸頁(yè)面。
第二種
設(shè)置 handler.UseCookies = false時(shí),則需要手動(dòng)給headers上加入cookies.
var handler = new HttpClientHandler() { UseCookies = false}; var client = new HttpClient(handler);// { BaseAddress = baseAddress }; var message = new HttpRequestMessage(HttpMethod.Get, url); message.Headers.Add("Cookie", "session_id=7258abbd1544b6c530a9f406d3e600239bd788fb"); var result = await client.SendAsync(message); result.EnsureSuccessStatusCode();
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C#如何讀寫應(yīng)用程序配置文件App.exe.config,并在界面上顯示
這篇文章主要介紹了C#如何讀寫應(yīng)用程序配置文件App.exe.config,并在界面上顯示問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06C# wpf使用ListBox實(shí)現(xiàn)尺子控件的示例代碼
本文主要介紹了C# wpf使用ListBox實(shí)現(xiàn)尺子控件的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07基于WPF實(shí)現(xiàn)跳動(dòng)的字符效果
這篇文章主要和大家介紹一個(gè)好玩但實(shí)際作用可能不太大的動(dòng)畫效果:跳動(dòng)的字符,本文將利用WPF實(shí)現(xiàn)這一效果,感興趣的小伙伴可以學(xué)習(xí)一下2023-08-08C# Winform實(shí)現(xiàn)圓角無(wú)鋸齒按鈕
這篇文章主要為大家詳細(xì)介紹了C# Winform實(shí)現(xiàn)圓角無(wú)鋸齒按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07winform 實(shí)現(xiàn)選擇文件和選擇文件夾對(duì)話框的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇winform 實(shí)現(xiàn)選擇文件和選擇文件夾對(duì)話框的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01opencvsharp瑕疵檢測(cè)的實(shí)現(xiàn)示例
本文主要介紹了opencvsharp瑕疵檢測(cè)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05