C#通过GET/POST方式发送Http请求
目录
- 两者的区别:
- 参数
- 传输数据的大小
- 安全性
- Get请求
- Post请求
两者的区别:
参数
Get请求把提交的数据进行简单编码,同时将url的一部分发送到服务器
比如url:Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB
所以get请求方式提交的数据存在一定的安全隐患,如果在使用对安全性要求教高的操作(比如用户登录,支付),应使用post方式。Get请求是默认的http请求方法,我们一般通过get方法来获取表单数据
POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。
传输数据的大小
GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。
POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。
安全性
POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击
HTTP中的GET,POST,SOAP协议都是在HTTP上运行的
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; }
调用方法
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(res)}
Post请求
/// 创建POST方式的HTTP请求public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary parameters, int timeout, string userAgent, CookieCollection cookies){HttpWebRequest request = null; //如果是发送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"; //设置代理UserAgent和超时//request.UserAgent = userAgent; //request.Timeout = timeout; if (cookies != null){request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); }//发送POST数据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 = https://www.it610.com/article/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; }/// /// 获取请求的数据/// public static string GetResponseString(HttpWebResponse webresponse){using (Stream s = webresponse.GetResponseStream()){StreamReader reader = new StreamReader(s, Encoding.UTF8); return reader.ReadToEnd(); }}
调用方法
//参数pIDictionary parameters = new Dictionary(); 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=出错了,可能是由于您的网络环境差、不稳定或安全软件禁止访问网络,您可在网络好时或关闭安全软件在重新访问网络。"); }else{//获取返回数据转为字符串string mes = HttpHelper.GetResponseString(res); T model = JsonHelper.DeserializeJsonToObject(mes); }
【C#通过GET/POST方式发送Http请求】到此这篇关于C#通过GET/POST方式发送Http请求的文章就介绍到这了,更多相关C# 发送Http请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- gitlab|gitlab 通过备份还原 admin/runner 500 Internal Server Error
- whlie循环和for循环的应用
- 接口|axios接口报错-参数类型错误解决
- 如何通过锻炼的方法治疗前列腺肥大
- 通过复盘快速成长(附模板)
- 用钱来爱你
- MyBatis|MyBatis Generator配置
- 运维|如何限制IP 通过 SSH连接服务器
- 运维|Linux 禁止用户或 IP通过 SSH 登录
- 青椒板书--足球