C#模拟Http与Https请求框架类实例
作者:shichen2014 时间:2023-02-10 16:28:11
本文实例讲述了C#模拟Http与Https请求框架类。分享给大家供大家参考。
具体实现方法如下:
using System.Text;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
namespace WebRequestTest
{
/// <summary>
/// 动态类,每个实例使用单独session
/// </summary>
public class HttpHelperNew
{
public CookieContainer cookie = new CookieContainer();
/// <summary>
/// post请求返回html
/// </summary>
/// <param name="Url"></param>
/// <param name="postDataStr"></param>
/// <returns></returns>
public string HttpPost(string Url, string postDataStr)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
//request.AllowAutoRedirect = false; //禁止自动重定向
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);
request.CookieContainer = cookie; //cookie信息由CookieContainer自行维护
Stream myRequestStream = request.GetRequestStream();
StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
myStreamWriter.Write(postDataStr);
myStreamWriter.Close();
HttpWebResponse response = null;
try
{
this.SetCertificatePolicy();
response = (HttpWebResponse)request.GetResponse();
}
catch (System.Exception ex)
{
}
//获取重定向地址
//string url1 = response.Headers["Location"];
if (response !=null)
{
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
else
{
return "error"; //post请求返回为空
}
}
/// <summary>
/// get请求获取返回的html
/// </summary>
/// <param name="Url"></param>
/// <param name="postDataStr"></param>
/// <returns></returns>
public string HttpGet(string Url, string Querydata)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (Querydata == "" ? "" : "?") + Querydata);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
request.CookieContainer = cookie;
this.SetCertificatePolicy();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// response.Cookies = cookie.GetCookies(response.ResponseUri);
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
/// <summary>
/// 获得响应中的图像
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public Stream GetResponseImage(string url)
{
Stream resst = null;
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.KeepAlive = true;
req.Method = "GET";
req.AllowAutoRedirect = true;
req.CookieContainer = cookie;
req.ContentType = "application/x-www-form-urlencoded";
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
req.Timeout = 50000;
Encoding myEncoding = Encoding.GetEncoding("UTF-8");
this.SetCertificatePolicy();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
resst = res.GetResponseStream();
return resst;
}
catch
{
return null;
}
}
/// <summary>
/// 正则获取匹配的第一个值
/// </summary>
/// <param name="html"></param>
/// <param name="pattern"></param>
/// <returns></returns>
public string getStringByRegex(string html,string pattern)
{
Regex re = new Regex(pattern, RegexOptions.IgnoreCase);
MatchCollection matchs = re.Matches(html);
if (matchs.Count > 0)
{
return matchs[0].Groups[1].Value;
}
else
return "";
}
/// <summary>
/// 正则验证返回的response是否正确
/// </summary>
/// <param name="html"></param>
/// <param name="pattern"></param>
/// <returns></returns>
public bool verifyResponseHtml(string html ,string pattern)
{
Regex re = new Regex(pattern);
return re.IsMatch(html);
}
//注册证书验证回调事件,在请求之前注册
private void SetCertificatePolicy()
{
ServicePointManager.ServerCertificateValidationCallback
+= RemoteCertificateValidate;
}
/// <summary>
/// 远程证书验证,固定返回true
/// </summary>
private static bool RemoteCertificateValidate(object sender, X509Certificate cert,
X509Chain chain, SslPolicyErrors error)
{
return true;
}
}
}
希望本文所述对大家的C#程序设计有所帮助。
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
springboot 使用QQ邮箱发送邮件的操作方法
![](https://img.aspxhome.com/file/2023/8/62218_0s.png)
JavaFX 监听窗口关闭事件实例详解
![](https://img.aspxhome.com/file/2023/4/110884_0s.jpg)
android自定义控件和自定义回调函数步骤示例
Java中ShardingSphere分库分表实战
![](https://img.aspxhome.com/file/2023/7/59767_0s.jpg)
深入解析C++编程中对设计模式中的策略模式的运用
![](https://img.aspxhome.com/file/2023/2/127522_0s.jpg)
SpringBoot中整合Minio文件存储的安装部署过程
![](https://img.aspxhome.com/file/2023/8/101958_0s.jpg)
SpringBoot快速搭建实现三步骤解析
![](https://img.aspxhome.com/file/2023/1/122321_0s.png)
详解SpringCloud Config配置中心
解决Jackson解析嵌套类问题(MismatchedInputException)
![](https://img.aspxhome.com/file/2023/9/57909_0s.png)
C#实现Array添加扩展实例
![](https://img.aspxhome.com/file/2023/2/74822_0s.png)
C#将html table 导出成excel实例
浅谈@PostConstruct不被调用的原因
![](https://img.aspxhome.com/file/2023/3/62503_0s.png)
Java实现删除排序链表中的重复元素的方法
android采用FFmpeg实现音视频合成与分离
提高C# StringBuilder操作性能优化的方法
![](https://img.aspxhome.com/file/2023/3/96323_0s.jpg)
Android EditText限制输入字符类型的方法总结
C++实现企业职工工资管理系统
IDEA安装详细步骤(多图预警)
![](https://img.aspxhome.com/file/2023/7/97787_0s.jpg)
通过实例解析java8中的parallelStream
SpringBoot如何优雅的整合Swagger Api自动生成文档
![](https://img.aspxhome.com/file/2023/3/72343_0s.png)