C#中WebRequest请求的一些心得
时间:2020-03-23
本文章向大家介绍C#中WebRequest请求的一些心得,主要包括C#中WebRequest请求的一些心得使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在C#开发中经常需要进行Web远程访问,方法很多,也使用了很久,但一直没有做一个总结。
C#中用来进行远程请求的方法有很多,如WebClient,WebRequest等,也各有特点。今天在这里主要介绍WebRequest。
先从相对入门的不需要证书验证,不需要登录的开始。
//GET类型的请求 public string GetContent(string uri, Encoding coding) { //Get请求中请求参数等直接拼接在url中 WebRequest request = WebRequest.Create(uri); //返回对Internet请求的响应 WebResponse resp = request.GetResponse(); //从网络资源中返回数据流 Stream stream = resp.GetResponseStream(); StreamReader sr = new StreamReader(stream, coding); //将数据流转换文字符串 string result = sr.ReadToEnd(); //关闭流数据 stream.Close(); sr.Close(); return result; }
//POST public string GetContentPost(string uri, string data, Encoding coding) { WebRequest request = WebRequest.Create(uri); request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; //将字符串数据转化为字节串,这也是POST请求与GET请求区别的地方 byte[] buffer = coding.GetBytes(data); //用于将数据写入Internet资源 Stream stream = request.GetRequestStream(); stream.Write(buffer, 0, buffer.Length); request.ContentLength = buffer.Length; WebResponse response = request.GetResponse(); //从网络资源中返回数据流 stream = response.GetResponseStream(); StreamReader sr = new StreamReader(stream, coding); //将数据流转换文字符串 string result = sr.ReadToEnd(); //关闭流数据 stream.Close(); sr.Close(); return result; }
//回调验证证书问题 public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { //直接返回true,接受指定证书进行身份验证 return true; } //Get public string GetContent(string uri, Encoding coding) { //下面一行代码一定卸载请求开始前。 //使用回调的方法进行验证。 ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult); //Get请求中请求参数等直接拼接在url中 WebRequest request = WebRequest.Create(uri); //返回对Internet请求的响应 WebResponse resp = request.GetResponse(); //从网络资源中返回数据流 Stream stream = resp.GetResponseStream(); StreamReader sr = new StreamReader(stream, coding); //将数据流转换文字符串 string result = sr.ReadToEnd(); //关闭流数据 stream.Close(); sr.Close(); return result; } //POST public string GetContentPost(string uri, string data, Encoding coding) { //下面一行代码一定卸载请求开始前。 //使用回调的方法进行验证。 ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult); WebRequest request = WebRequest.Create(uri); request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; //将字符串数据转化为字节串,这也是POST请求与GET请求区别的地方 byte[] buffer = coding.GetBytes(data); //用于将数据写入Internet资源 Stream stream = request.GetRequestStream(); stream.Write(buffer, 0, buffer.Length); request.ContentLength = buffer.Length; WebResponse response = request.GetResponse(); //从网络资源中返回数据流 stream = response.GetResponseStream(); StreamReader sr = new StreamReader(stream, coding); //将数据流转换文字符串 string result = sr.ReadToEnd(); //关闭流数据 stream.Close(); sr.Close(); return result; }
//只需在证书验证的回调函数中添加几行代码即可
//回调验证证书问题 public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { Console.WriteLine("证书的有效日期:" + certificate.GetEffectiveDateString()); Console.WriteLine("证书的到期日期:" + certificate.GetExpirationDateString()); Console.WriteLine("证书格式名称:" + certificate.GetFormat()); Console.WriteLine("证书办法机构名称:" + certificate.Issuer); Console.WriteLine("密钥算法信息:" + certificate.GetKeyAlgorithm()); Console.WriteLine("证书的公钥:" + certificate.GetPublicKeyString()); Console.WriteLine("证书序列号:" + certificate.GetSerialNumberString()); // 总是接受 return true; }
使用如下GET方式访问百度。即可得到截图效果。
GetContent("https://www.baidu.com/", Encoding.UTF8);
Console.WriteLine(str);
原文地址:https://www.cnblogs.com/DSC1991/p/12552012.html
- R语言 apply函数家族详解
- 基于R语言的梯度推进算法介绍
- R语言数据可视化综合指南
- 关于CLR内存管理一些深层次的讨论[上篇]
- 关于CLR内存管理一些深层次的讨论[下篇]
- Python渗透工具的架构探讨
- 提供第三种代码生成方式——通过自定义BuildProvider为ASP.NET提供代码生成
- 小心,Android木马工具SpyNote免费啦!远程监听就是这么简单
- R语言的kmeans客户细分模型聚类
- .NET的资源并不限于.resx文件,你可以采用任意存储形式[下篇]
- 量化投资教程:用R语言打造量化分析平台
- 也谈事件(Event)
- Zuul:构建高可用网关之多维度限流
- Hystrix:HystrixCollapser请求合并
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android自定义TimeButton实现倒计时按钮
- android自定义圆形倒计时显示控件
- android实现上下左右滑动界面布局
- Android使用MediaCodec将摄像头采集的视频编码为h264
- Android开发人脸识别登录功能
- Android利用碎片fragment实现底部标题栏(Github模板开源)
- Android MediaPlayer 播放音频的方式
- Android切圆角的几种常见方式总结
- Android DSelectorBryant 单选滚动选择器的实例代码
- Android 拍照选择图片并上传功能的实现思路(包含权限动态获取)
- Android Canvas的drawText()与文字居中方案详解
- JeecgCloud版,部署项目。
- docker(镜像常用命令)
- [- Flutter基础篇 -] 聊聊那些弹框
- 聊一聊Android中的StateListAnimator