C#通過GET/POST方式發(fā)送Http請求
介紹http請求的兩種方式,get和post方式。并用C#語言實(shí)現(xiàn),如何請求url并獲取返回的數(shù)據(jù)
兩者的區(qū)別:
參數(shù)
Get請求把提交的數(shù)據(jù)進(jìn)行簡單編碼,同時將url的一部分發(fā)送到服務(wù)器
比如url:Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB
所以get請求方式提交的數(shù)據(jù)存在一定的安全隱患,如果在使用對安全性要求教高的操作(比如用戶登錄,支付),應(yīng)使用post方式。Get請求是默認(rèn)的http請求方法,我們一般通過get方法來獲取表單數(shù)據(jù)
POST請求會把請求的數(shù)據(jù)放置在HTTP請求包的包體中。上面的item=bandsaw就是實(shí)際的傳輸數(shù)據(jù)。
傳輸數(shù)據(jù)的大小
GET,特定的瀏覽器和服務(wù)器對URL的長度有限制。因此,在使用GET請求時,傳輸數(shù)據(jù)會受到URL長度的限制。
POST,由于不是URL傳值,理論上是不會受限制的,但是實(shí)際上各個服務(wù)器會規(guī)定對POST提交數(shù)據(jù)大小進(jìn)行限制,Apache、IIS都有各自的配置。
安全性
POST的安全性比GET的高。這里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全僅僅是不修改服務(wù)器的數(shù)據(jù)。比如,在進(jìn)行登錄操作,通過GET請求,用戶名和密碼都會暴露再URL上,因?yàn)榈卿涰撁嬗锌赡鼙粸g覽器緩存以及其他人查看瀏覽器的歷史記錄的原因,此時的用戶名和密碼就很容易被他人拿到了。除此之外,GET請求提交的數(shù)據(jù)還可能會造成Cross-site request frogery攻擊
HTTP中的GET,POST,SOAP協(xié)議都是在HTTP上運(yùn)行的
Get請求
請求類
/// /// Get請求 /// /// /// 字符串 public static string GetHttpResponse(string url, int Timeout) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; request.ContentType = "text/html;charset=UTF-8"; request.UserAgent = null; request.Timeout = Timeout; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; }
調(diào)用方法
string url="Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB"; string res = HttpHelper.GetHttpResponse(url, 6000); if (res != null) { T mes = JsonHelper.DeserializeJsonToObject<T>(res) }
Post請求
/// 創(chuàng)建POST方式的HTTP請求 public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int timeout, string userAgent, CookieCollection cookies) { HttpWebRequest request = null; //如果是發(fā)送HTTPS請求 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { request = WebRequest.Create(url) as HttpWebRequest; } else { request = WebRequest.Create(url) as HttpWebRequest; } request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; //設(shè)置代理UserAgent和超時 //request.UserAgent = userAgent; //request.Timeout = timeout; if (cookies != null) { request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); } //發(fā)送POST數(shù)據(jù) if (!(parameters == null || parameters.Count == 0)) { StringBuilder buffer = new StringBuilder(); int i = 0; foreach (string key in parameters.Keys) { if (i > 0) { buffer.AppendFormat("&{0}={1}", key, parameters[key]); } else { buffer.AppendFormat("{0}={1}", key, parameters[key]); i++; } } byte[] data = Encoding.ASCII.GetBytes(buffer.ToString()); using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } } string[] values = request.Headers.GetValues("Content-Type"); return request.GetResponse() as HttpWebResponse; } /// <summary> /// 獲取請求的數(shù)據(jù) /// </summary> public static string GetResponseString(HttpWebResponse webresponse) { using (Stream s = webresponse.GetResponseStream()) { StreamReader reader = new StreamReader(s, Encoding.UTF8); return reader.ReadToEnd(); } }
調(diào)用方法
//參數(shù)p IDictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("p", HttpUtility.UrlEncode(p)); //http請求 System.Net.HttpWebResponse res = HttpHelper.CreatePostHttpResponse(url, parameters, 3000, null, null); if (res == null) { Response.Redirect("RequestFailed.aspx?result=出錯了,可能是由于您的網(wǎng)絡(luò)環(huán)境差、不穩(wěn)定或安全軟件禁止訪問網(wǎng)絡(luò),您可在網(wǎng)絡(luò)好時或關(guān)閉安全軟件在重新訪問網(wǎng)絡(luò)。"); } else { //獲取返回?cái)?shù)據(jù)轉(zhuǎn)為字符串 string mes = HttpHelper.GetResponseString(res); T model = JsonHelper.DeserializeJsonToObject<T>(mes); }
到此這篇關(guān)于C#通過GET/POST方式發(fā)送Http請求的文章就介紹到這了,更多相關(guān)C# 發(fā)送Http請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c# WPF中通過雙擊編輯DataGrid中Cell的示例(附源碼)
這篇文章主要介紹了c# WPF中通過雙擊編輯DataGrid中Cell的示例(附源碼),幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03C#調(diào)用WebService實(shí)例開發(fā)
那么,我們怎么在項(xiàng)目中調(diào)用WebService這個方法呢,其實(shí)這和調(diào)用天氣的webservice是一個道理,首先,通過添加“web服務(wù) 引用”將,你寫的webservice引用進(jìn)來,我們需要注意的是其中有一處要我們填寫請求webservice的URL地址,我們該怎么寫?2015-09-09教你C#將CSV轉(zhuǎn)為Excel的實(shí)現(xiàn)方法
這篇文章主要介紹了C#?將CSV轉(zhuǎn)為Excel,轉(zhuǎn)換之后可執(zhí)行更多關(guān)于數(shù)據(jù)編輯、格式設(shè)置等操作,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2022-03-03winform 使用Anchor屬性進(jìn)行界面布局的方法詳解
這篇文章主要介紹了winform 使用Anchor屬性進(jìn)行界面布局的方法,有需要的朋友可以參考一下2013-12-12