using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Net; namespace Utility { /// <summary> /// 通过Http协议访问Web /// </summary> public class HttpClient { #region Cookie集合 /// <summary> /// Cookie集合 /// </summary> private CookieContainer cookies; #endregion #region Http user-agent标头值 /// <summary> /// Http user-agent标头值 /// </summary> public string UserAgent { get; set; } #endregion #region HttpClient构造函数 public HttpClient() { this.cookies = new CookieContainer(); } #endregion #region 获取HttpClient的Cookie集合 /// <summary> /// 获取HttpClient的Cookie集合 /// </summary> /// <returns></returns> public CookieContainer GetCookieContainer() { return this.cookies; } #endregion #region 设置HttpClient的Cookie集合 /// <summary> /// 设置HttpClient的Cookie集合 /// </summary> /// <param name="_cookie">Cookie集合对象</param> /// <returns>True设置成功 False设置失败</returns> public bool SetCookieContainer(CookieContainer _cookie) { if (_cookie != null) { this.cookies = _cookie; return true; } return false; } #endregion #region 以GET方式打开一个Http连接 /// <summary> /// 以GET方式打开一个Http连接 /// </summary> /// <param name="url">地址</param> /// <param name="headers">请求头</param> /// <returns></returns> public ResultResponse OpenGetUrl(string url, Dictionary<string, string> headers) { HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.CookieContainer = this.cookies; request.Method = HttpClient.ConnectionType.GET; request.KeepAlive = true; if (this.UserAgent != null && this.UserAgent != "") { request.UserAgent = this.UserAgent; } this.FillHeaders(request, headers); HttpWebResponse response = request.GetResponse() as HttpWebResponse; return new ResultResponse(response); } #endregion #region 以GET方式打开一个Http连接,302自定义处理行为 /// <summary> /// 以GET方式打开一个Http连接,302自定义处理行为 /// </summary> /// <param name="url">地址</param> /// <param name="headers">请求头</param> /// <param name="action">302跳转处理</param> /// <returns></returns> public ResultResponse OpenGetUrlRedirect(string url, Dictionary<string, string> headers, HttpClient.RedirectAction action) { HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.CookieContainer = this.cookies; request.Method = HttpClient.ConnectionType.GET; request.KeepAlive = true; request.AllowAutoRedirect = false; //302不采用默认行为处理 if (this.UserAgent != null && this.UserAgent != "") { request.UserAgent = this.UserAgent; } this.FillHeaders(request, headers); HttpWebResponse response = request.GetResponse() as HttpWebResponse; ResultResponse result = new ResultResponse(response); if (response.StatusCode == HttpStatusCode.Found) { bool ret = true; if (action != null) { ret = action(result); } string locationurl = response.Headers["Location"]; if (ret == true) { return this.OpenGetUrlRedirect(locationurl, null, action); } return result; } return result; } #endregion #region Http 302跳转处理 /// <summary> /// Http 302跳转处理 /// </summary> /// <param name="result">响应对象</param> /// <returns>False 不继续跳转 True继续跳转</returns> public delegate bool RedirectAction(ResultResponse result); #endregion #region 将Http标头值添加到Request对象中 /// <summary> /// 将Http标头值添加到Request对象中 /// </summary> /// <param name="headers"></param> private void FillHeaders(HttpWebRequest request, Dictionary<string, string> headers) { if (headers != null && headers.Count > 0) { Dictionary<string, string>.Enumerator em = headers.GetEnumerator(); while (em.MoveNext()) { request.Headers.Add(em.Current.Key, em.Current.Value); } } } #endregion #region 以POST方式打开一个Http连接 /// <summary> /// 以POST方式打开一个Http连接 /// </summary> /// <param name="url">地址</param> /// <param name="headers">请求头</param> /// <param name="data">发送的数据</param> /// <returns></returns> public ResultResponse OpenPostUrl(string url, Dictionary<string, string> headers, Dictionary<string, string> data) { HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.CookieContainer = this.cookies; request.Method = HttpClient.ConnectionType.POST; request.KeepAlive = true; if (this.UserAgent != null && this.UserAgent != "") { request.UserAgent = this.UserAgent; } this.FillHeaders(request, headers); byte[] buff = DictToBytes(data); request.GetRequestStream().Write(buff, 0, buff.Length); request.GetRequestStream().Close(); HttpWebResponse response = request.GetResponse() as HttpWebResponse; return new ResultResponse(response); } #endregion #region 以POST方式打开一个Http连接,302自定义处理行为 /// <summary> /// 以POST方式打开一个Http连接,302自定义处理行为 /// </summary> /// <param name="url">地址</param> /// <param name="headers">请求头</param> /// <param name="data">发送的数据</param> /// <param name="action">302自定义处理</param> /// <returns></returns> public ResultResponse OpenPostUrlRedirect(string url, Dictionary<string, string> headers, Dictionary<string, string> data, HttpClient.RedirectAction action) { HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.CookieContainer = this.cookies; request.Method = HttpClient.ConnectionType.POST; request.KeepAlive = true; request.AllowAutoRedirect = false; if (this.UserAgent != null && this.UserAgent != "") { request.UserAgent = this.UserAgent; } this.FillHeaders(request, headers); byte[] buff = DictToBytes(data); request.GetRequestStream().Write(buff, 0, buff.Length); request.GetRequestStream().Close(); HttpWebResponse response = request.GetResponse() as HttpWebResponse; ResultResponse result = new ResultResponse(response); if (response.StatusCode == HttpStatusCode.Found) { bool ret = true; if (action != null) { ret = action(result); } string locationurl = response.Headers["Location"]; return result; } return result; } #endregion #region 将字典的key和value拼接成http参数 /// <summary> /// 将字典的key和value拼接成http参数 /// </summary> /// <param name="dic">参数</param> /// <returns></returns> private byte[] DictToBytes(Dictionary<string, string> dic) { StringBuilder sb = null; if (dic != null) { Dictionary<string, string>.Enumerator em = dic.GetEnumerator(); sb = new StringBuilder(); while (em.MoveNext()) { sb.Append(String.Format("{0}={1}&", em.Current.Key, em.Current.Value)); } return System.Text.Encoding.UTF8.GetBytes(sb.ToString()); } return null; } #endregion #region HttpClient打开连接的方式 /// <summary> /// HttpClient打开连接的方式 /// </summary> public static class ConnectionType { public static string GET { get { return "GET"; } } public static string POST { get { return "POST"; } } } #endregion } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Net; namespace Utility { /// <summary> ///包含服务器响应数据的对象 /// </summary> public class ResultResponse { #region HttpWebResponse对象 /// <summary> /// HttpWebResponse对象 /// </summary> private HttpWebResponse m_response; #endregion #region 创建一个HttpWebResponse对象 /// <summary> /// 创建一个HttpWebResponse对象 /// </summary> /// <param name="_response">HttpWebResponse</param> public ResultResponse(HttpWebResponse _response) { this.m_response = _response; } #endregion #region 获取响应内容的二进制流 /// <summary> /// 获取响应内容的二进制流 /// </summary> /// <returns></returns> public Stream GetResponseStream() { if (this.m_response != null) { return this.m_response.GetResponseStream(); } return null; } #endregion #region Http版本 /// <summary> /// Http版本 /// </summary> public string ProtocolVersion { get { return this.m_response != null ? this.m_response.ProtocolVersion.ToString() : ""; } } #endregion /// <summary> /// 响应方法 /// </summary> public string Method { get { return this.m_response != null ? this.m_response.Method : ""; } } /// <summary> /// Http状态码 /// </summary> public string StatusCode { get { return this.m_response != null ? this.m_response.StatusCode.ToString() : ""; } } /// <summary> /// Http响应头 /// </summary> public WebHeaderCollection Headers { get { return this.m_response != null ? this.m_response.Headers : null; } } /// <summary> /// 响应流的字符编码 /// </summary> /// <returns></returns> public Encoding getResponseEncoding() { if (this.m_response != null) { return Encoding.GetEncoding(this.m_response.ContentEncoding); } return null; } /// <summary> /// 获取响应内容的字符串 /// </summary> /// <param name="encoding">字符串编码(默认utf8)</param> /// <returns></returns> public string GetContent(string encoding = "utf-8") { return System.Text.Encoding.GetEncoding(encoding).GetString(this.StreamtoBytes(this.GetResponseStream())); } /// <summary> /// 获取原始的HttpWebResponse /// </summary> /// <returns></returns> public HttpWebResponse GetRawResponse() { return this.m_response; } /// <summary> /// 二进制流转换成字节数组 /// </summary> /// <param name="_stream"></param> /// <returns></returns> private byte[] StreamtoBytes(Stream _stream) { byte[] buff; int rlen; MemoryStream _ms; if (_stream != null) { buff = new byte[1024]; rlen = 0; _ms = new MemoryStream(); while ((rlen = _stream.Read(buff, 0, 1024)) > 0) { _ms.Write(buff, 0, rlen); } buff = _ms.ToArray(); _ms.Close(); _ms.Dispose(); return buff; } return null; } } }
相关推荐
接口协议http访问方式post 利用C#创建post访问http接口.demo代码
c# rest http请求类库c# rest http请求类库c# rest http请求类库
C#WEB用户令牌TOKEN验证,防止HTTP、GET、POST等提交包含服务端和客户端源码。Nginx集群,SSL证书的WebApi令牌验证
C#访问domino,通过http访问Domino,C#快速访问Domino,C#集成lotus domino 完全提供源码 界面请查阅 https://blog.csdn.net/weijia3624/article/details/113108704
使用C#作为客户端访问gsoap的webservice,基于VS2015简单用例,包括C#、C++客户端,服务端源代码
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全...资源主要是讲解:c#采用https访问Web服务器的编程方法,以及源代码实现Https证书认证的过程。
客户端计算1+1 传递给服务器 通过服务器运算 把2返回给客户端
c# http请求webapi接口封装类
C#访问sqlite并显示在listbox中,且包括数据插入和删除。可在下面连接下载源码: http://download.csdn.net/detail/min20062020/5483175
简单登陆器,登陆成功后进如MDI界面,进行http基本操作。例如:获取headers,下载,浏览网页。。。 自己做的,没什么注释。 vs2005,第一次上传,请多多指教。
构建一个简单的HTTP服务器的C#程序实例。实现响应GET、POST请求。在服务端创建一个tcp通信来负责监听客户端连接。每次客户端发出请求后,我们根据请问报文来判断客户端的请求类型,然后根据不同的请求类型进行相应的...
自己封装的http访问类。可以方便访问http地址
C#调用httplistener实现简单的http服务器例子:编译后是一个控制台应用程序,启动后,可通过 http://127.0.0.1/ 访问,采用了回调模式提供http服务,支持高并发
c#写得一个小程序,用于检测网站的各个节点是否能够访问,并通过邮件通知,适合监控~
断点续流(HTTP 通用数据访问层 C# .NET B/S 断点续流(HTTP 通用数据访问层 C# .NET B/S 断点续流(HTTP 通用数据访问层 C# .NET B/S
将设备上的数据通过c#传到MES
最全的教程部署redis cluster方式集群,及c# 写的访问集群的源码,自己的下载分数快不够,赚2分,教程地址:http://www.cnblogs.com/uucode/p/6486395.html
调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...
开源的 C# Android ADB工具
网站访问流量统计系统 C#源代码 演示地址:http://netfree.meibu.com/itsun QQ:451327881 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 网络访问统计系统功能列表 ●实时...