百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

C# HttpWebRequest HttpHelper 类

yuyutoo 2024-10-11 23:57 8 浏览 0 评论

HttpHelper老早的一个类,使用中有些地方还需要调整,整体大概可用。

 public class HttpHelper<T> where T : class //限制转换T为一个类
    {
        /// <summary>
        /// 判断是否是一个正确格式的URL
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static bool IsUrl(string url)
        {
            url = url.Trim().ToLower();
            if (url.StartsWith("http://") || url.StartsWith("https://"))
            {
                return true;
            }
            return false;
        }

        /// <summary>
        /// 用Get取得页面信息
        /// </summary>
        /// <param name="url"></param>
        /// <param name="requestConfig"></param>
        /// <param name="proxyConfig"></param>
        /// <returns></returns>
        public static string HttpGetString(string url, RequestConfig requestConfig = null, WebProxyConfig proxyConfig = null)
        {
            string ret = "";
            try
            {
                if (requestConfig == null)
                {
                    requestConfig = new RequestConfig();
                }
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "Get";
                request.UserAgent = requestConfig.UserAgent;
                request.Accept = requestConfig.Accept;
                request.ContentType = requestConfig.ContentType;
                request.Timeout = requestConfig.Timeout;
                request.AllowAutoRedirect = requestConfig.AllowAutoRedirect;
                request.KeepAlive = requestConfig.KeepAlive;
                request.Headers = requestConfig.Headers;
                if (proxyConfig != null)
                {
                    WebProxy wp = new WebProxy(proxyConfig.address, true);
                    wp.Credentials = new NetworkCredential(proxyConfig.user, proxyConfig.password);
                    request.Proxy = wp;
                }
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream stream = response.GetResponseStream();
                StreamReader sr = new StreamReader(stream, requestConfig.ContentEncoding);
                ret = sr.ReadToEnd();
                sr.Close();
                stream.Close();
                response.Close();
                return ret;
            }
            catch (Exception ex)
            {
                //输出日志
            }
            return ret;
        }

        /// <summary>
        /// Post表单信息
        /// </summary>
        /// <param name="url"></param>
        /// <param name="postData"></param>
        /// <param name="requestConfig"></param>
        /// <param name="proxyConfig"></param>
        /// <returns></returns>
        public static string HttpPostString(string url, string postData, RequestConfig requestConfig = null, WebProxyConfig proxyConfig = null)
        {
            string ret = "";
            try
            {
                if (requestConfig == null)
                {
                    requestConfig = new RequestConfig();
                }
                byte[] data = requestConfig.ContentEncoding.GetBytes(postData);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                CookieContainer cookie = new CookieContainer();
                request.CookieContainer = cookie;
                request.AllowAutoRedirect = requestConfig.AllowAutoRedirect;
                request.UserAgent = requestConfig.UserAgent;
                request.Method = "Post";
                request.Accept = requestConfig.Accept;
                request.ContentType = requestConfig.ContentType;
                request.Timeout = requestConfig.Timeout;
                request.ContentLength = data.Length;
                if (proxyConfig != null)
                {
                    WebProxy wp = new WebProxy(proxyConfig.address, true);
                    wp.Credentials = new NetworkCredential(proxyConfig.user, proxyConfig.password);
                    request.Proxy = wp;
                }
                Stream outStream = request.GetRequestStream();
                outStream.Write(data, 0, data.Length);
                outStream.Close();
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                Stream inStream = response.GetResponseStream();
                StreamReader sr = new StreamReader(inStream, requestConfig.ContentEncoding);
                ret = sr.ReadToEnd();
                sr.Close();
                inStream.Close();
                response.Close();
                return ret;
            }
            catch (Exception ex)
            {
                //输出日志
            }
            return ret;
        }

        /// <summary>
        /// 下载一个文件
        /// </summary>
        /// <param name="url"></param>
        /// <param name="outFile"></param>
        /// <param name="requestConfig"></param>
        /// <param name="proxyConfig"></param>
        /// <returns></returns>
        public static bool DownloadFile(string url, string outFile, RequestConfig requestConfig = null, WebProxyConfig proxyConfig = null)
        {
            bool ret = false;
            FileStream fs = null;
            try
            {
                if (requestConfig == null)
                {
                    requestConfig = new RequestConfig();
                }
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                request.Method = "Get";
                request.ContentType = requestConfig.ContentType;
                request.Accept = requestConfig.Accept;
                request.UserAgent = requestConfig.UserAgent;
                if (proxyConfig != null)
                {
                    WebProxy wp = new WebProxy(proxyConfig.address, true);
                    wp.Credentials = new NetworkCredential(proxyConfig.user, proxyConfig.password);
                }
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                Stream stream = response.GetResponseStream();
                fs = new FileStream(outFile, FileMode.Create);
                int bufferSize = 1024;
                byte[] data = new byte[bufferSize];
                int length = 0;
                while ((length = stream.Read(data, 0, bufferSize)) > 0)
                {
                    fs.Write(data, 0, length);
                }
                fs.Close();
                stream.Close();
                response.Close();
                ret = true;
            }
            catch (Exception ex)
            {
                //输出日志
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                }
            }
            return ret;
        }

        /// <summary>
        /// 用Get取得一个Json数据,将其转换为类
        /// </summary>
        /// <param name="url"></param>
        /// <param name="requestConfig"></param>
        /// <param name="proxyConfig"></param>
        /// <returns></returns>
        public static T HttpGetObject(string url, RequestConfig requestConfig = null, WebProxyConfig proxyConfig = null)
        {
            T item;
            try
            {
                if (requestConfig == null)
                {
                    requestConfig = new RequestConfig();
                }
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                request.Method = "Get";
                request.UserAgent = requestConfig.UserAgent;
                request.Accept = requestConfig.Accept;
                request.ContentType = requestConfig.ContentType;
                request.Timeout = requestConfig.Timeout;
                request.AllowAutoRedirect = requestConfig.AllowAutoRedirect;
                request.KeepAlive = requestConfig.KeepAlive;
                if (proxyConfig != null)
                {
                    WebProxy wp = new WebProxy(proxyConfig.address, true);
                    wp.Credentials = new NetworkCredential(proxyConfig.user, proxyConfig.password);
                    request.Proxy = wp;
                }
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                Stream stream = response.GetResponseStream();
                StreamReader sr = new StreamReader(stream, requestConfig.ContentEncoding);
                string content = sr.ReadToEnd();
                sr.Close();
                stream.Close();
                response.Close();
                item = JsonConvert.DeserializeObject<T>(content);
                return item;
            }
            catch (Exception ex)
            {
                //输出日志
            }
            return null;
        }

        /// <summary>
        /// Post取得JSON转换为列表对像
        /// </summary>
        /// <param name="url"></param>
        /// <param name="postData"></param>
        /// <param name="contentType"></param>
        /// <param name="timeout"></param>
        /// <param name="config"></param>
        /// <returns></returns>
        public static T HttpPostObject(string url, string postData, RequestConfig requestConfig = null
            , WebProxyConfig proxyConfig = null)
        {
            T item;
            Stream outstream = null;
            Stream instream = null;
            StreamReader sr = null;
            HttpWebResponse response = null;
            HttpWebRequest request = null;
            Encoding encoding = Encoding.UTF8;
            byte[] data = encoding.GetBytes(postData);
            //准备请求...
            try
            {
                if (requestConfig == null)
                {
                    requestConfig = new RequestConfig();
                }
                //设置参数
                request = WebRequest.Create(url) as HttpWebRequest;
                CookieContainer cookieContainer = new CookieContainer();
                request.CookieContainer = cookieContainer;
                request.AllowAutoRedirect = requestConfig.AllowAutoRedirect;
                request.UserAgent = requestConfig.UserAgent;
                request.Method = "POST";
                request.Accept = requestConfig.Accept;
                request.ContentType = requestConfig.ContentType;
                request.Timeout = requestConfig.Timeout;
                request.KeepAlive = requestConfig.KeepAlive;
                request.ContentLength = data.Length;
                if (proxyConfig != null)
                {
                    WebProxy wp = new WebProxy(proxyConfig.address, true);
                    wp.Credentials = new NetworkCredential(proxyConfig.user, proxyConfig.password);
                    request.Proxy = wp;
                }
                outstream = request.GetRequestStream();
                outstream.Write(data, 0, data.Length);
                outstream.Close();
                //发送请求并获取相应回应数据
                response = request.GetResponse() as HttpWebResponse;
                //直到request.GetResponse()程序才开始向目标网页发送Post请求
                instream = response.GetResponseStream();
                sr = new StreamReader(instream, encoding);
                //返回数据
                string content = sr.ReadToEnd();
                item = JsonConvert.DeserializeObject<T>(content);
                return item;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }
    /// <summary>
    /// Web代理配制信息
    /// </summary>
    public class WebProxyConfig
    {
        public string address { get; set; }
        public string user { get; set; }

        public string password { get; set; }

        public WebProxyConfig()
        {

        }

        public WebProxyConfig(string address, string user, string password)
        {
            this.address = address;
            this.user = user;
            this.password = password;
        }
    }
    public class RequestConfig
    {
        private bool _AllowAutoRedirect = true;
        /// <summary>
        /// 自动跳转
        /// </summary>
        public bool AllowAutoRedirect
        {
            get
            {
                return _AllowAutoRedirect;
            }
            set
            {
                AllowAutoRedirect = value;
            }
        }

        private string _UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36";
        /// <summary>
        /// 指定浏览器
        /// </summary>
        public string UserAgent
        {
            get
            {
                return _UserAgent;
            }
            set
            {
                _UserAgent = value;
            }
        }

        private string _Accept = "*/*";
        /// <summary>
        /// 资源的媒体类型
        /// </summary>
        public string Accept
        {
            get
            {
                return _Accept;
            }
            set
            {
                _Accept = value;
            }
        }

        private int _Timeout = 10 * 1000;
        /// <summary>
        /// 指定超时
        /// </summary>
        public int Timeout
        {
            get
            {
                return _Timeout;
            }
            set
            {
                _Timeout = value;
            }
        }

        private bool _KeepAlive = true;
        /// <summary>
        /// 资源建立持久性连接
        /// </summary>
        public bool KeepAlive
        {
            get
            {
                return _KeepAlive;
            }
            set
            {
                _KeepAlive = value;
            }
        }

        private string _ContentType = "application/x-www-form-urlencoded";
        /// <summary>
        /// 资源的媒体类型
        /// </summary>
        public string ContentType
        {
            get
            {
                return _ContentType;
            }
            set
            {
                _ContentType = value;
            }
        }

        /// <summary>
        /// 内容编码
        /// </summary>
        public Encoding _ContentEncoding = System.Text.Encoding.UTF8;
        public Encoding ContentEncoding
        {
            get
            {
                return _ContentEncoding;
            }
            set
            {
                _ContentEncoding = value;
            }
        }

        public WebHeaderCollection _Headers = new WebHeaderCollection();
        public WebHeaderCollection Headers
        {
            get
            {
                return _Headers;
            }
            set
            {
                _Headers = value;
            }
        }
    }

HttpWebResponse请求状态代码标识

成员名称

说明

Continue

等效于 HTTP 状态 100。Continue 指示客户端可能继续其请求。

SwitchingProtocols

等效于 HTTP 状态 101。SwitchingProtocols 指示正在更改协议版本或协议。

OK

等效于 HTTP 状态 200。OK 指示请求成功,且请求的信息包含在响应中。这是最常接收的状态代码。

Created

等效于 HTTP 状态 201。Created 指示请求导致在响应被发送前创建新资源。

Accepted

等效于 HTTP 状态 202。Accepted 指示请求已被接受做进一步处理。

NonAuthoritativeInformation

等效于 HTTP 状态 203。NonAuthoritativeInformation 指示返回的元信息来自缓存副本而不是原始服务器,因此可能不正确。

NoContent

等效于 HTTP 状态 204。NoContent 指示已成功处理请求并且响应已被设定为无内容。

ResetContent

等效于 HTTP 状态 205。ResetContent 指示客户端应重置(或重新加载)当前资源。

PartialContent

等效于 HTTP 状态 206。PartialContent 指示响应是包括字节范围的 GET 请求所请求的部分响应。

MultipleChoices

等效于 HTTP 状态 300。MultipleChoices 指示请求的信息有多种表示形式。默认*作是将此状态视为重定向,并遵循与此相应关联的 Location 头的内容。

Ambiguous

等效于 HTTP 状态 300。Ambiguous 指示请求的信息有多种表示形式。默认*作是将此状态视为重定向,并遵循与此相应关联的 Location 头的内容。

MovedPermanently

等效于 HTTP 状态 301。MovedPermanently 指示请求的信息已移到 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。

Moved

等效于 HTTP 状态 301。Moved 指示请求的信息已移到 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。

Found

等效于 HTTP 状态 302。Found 指示请求的信息位于 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。

Redirect

等效于 HTTP 状态 302。Redirect 指示请求的信息位于 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。

SeeOther

等效于 HTTP 状态 303。作为 POST 的结果,SeeOther 将客户端自动重定向到 Location 头中指定的 URI。用 GET 生成对 Location 头所指定的资源的请求。

RedirectMethod

等效于 HTTP 状态 303。作为 POST 的结果,RedirectMethod 将客户端自动重定向到 Location 头中指定的 URI。用 GET 生成对 Location 头所指定的资源的请求。

NotModified

等效于 HTTP 状态 304。NotModified 指示客户端的缓存副本是最新的。未传输此资源的内容。

UseProxy

等效于 HTTP 状态 305。UseProxy 指示请求应使用位于 Location 头中指定的 URI 的代理服务器。

Unused

等效于 HTTP 状态 306。Unused 是未完全指定的 HTTP/1.1 规范的建议扩展。

TemporaryRedirect

等效于 HTTP 状态 307。TemporaryRedirect 指示请求信息位于 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求还将使用 POST 方法。

RedirectKeepVerb

等效于 HTTP 状态 307。RedirectKeepVerb 指示请求信息位于 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求还将使用 POST 方法。

BadRequest

等效于 HTTP 状态 400。BadRequest 指示服务器未能识别请求。如果没有其他适用的错误,或者如果不知道准确的错误或错误没有自己的错误代码,则发送 BadRequest

Unauthorized

等效于 HTTP 状态 401。Unauthorized 指示请求的资源要求身份验证。WWW-Authenticate 头包含如何执行身份验证的详细信息。

PaymentRequired

等效于 HTTP 状态 402。保留 PaymentRequired 以供将来使用。

Forbidden

等效于 HTTP 状态 403。Forbidden 指示服务器拒绝满足请求。

NotFound

等效于 HTTP 状态 404。NotFound 指示请求的资源不在服务器上。

MethodNotAllowed

等效于 HTTP 状态 405。MethodNotAllowed 指示请求的资源上不允许请求方法(POST 或 GET)。

NotAcceptable

等效于 HTTP 状态 406。NotAcceptable 指示客户端已用 Accept 头指示将不接受资源的任何可用表示形式。

ProxyAuthenticationRequired

等效于 HTTP 状态 407。ProxyAuthenticationRequired 指示请求的代理要求身份验证。Proxy-authenticate 头包含如何执行身份验证的详细信息。

RequestTimeout

等效于 HTTP 状态 408。RequestTimeout 指示客户端没有在服务器期望请求的时间内发送请求。

Conflict

等效于 HTTP 状态 409。Conflict 指示由于服务器上的冲突而未能执行请求。

Gone

等效于 HTTP 状态 410。Gone 指示请求的资源不再可用。

LengthRequired

等效于 HTTP 状态 411。LengthRequired 指示缺少必需的 Content-length 头。

PreconditionFailed

等效于 HTTP 状态 412。PreconditionFailed 指示为此请求设置的条件失败,且无法执行此请求。条件是用条件请求标头(如 If-Match、If-None-Match 或 If-Unmodified-Since)设置的。

RequestEntityTooLarge

等效于 HTTP 状态 413。RequestEntityTooLarge 指示请求太大,服务器无法处理。

RequestUriTooLong

等效于 HTTP 状态 414。RequestUriTooLong 指示 URI 太长。

UnsupportedMediaType

等效于 HTTP 状态 415。UnsupportedMediaType 指示请求是不支持的类型。

RequestedRangeNotSatisfiable

等效于 HTTP 状态 416。RequestedRangeNotSatisfiable 指示无法返回从资源请求的数据范围,因为范围的开头在资源的开头之前,或因为范围的结尾在资源的结尾之后。

ExpectationFailed

等效于 HTTP 状态 417。ExpectationFailed 指示服务器未能符合 Expect 头中给定的预期值。

InternalServerError

等效于 HTTP 状态 500。InternalServerError 指示服务器上发生了一般错误。

NotImplemented

等效于 HTTP 状态 501。NotImplemented 指示服务器不支持请求的函数。

BadGateway

等效于 HTTP 状态 502。BadGateway 指示中间代理服务器从另一代理或原始服务器接收到错误响应。

ServiceUnavailable

等效于 HTTP 状态 503。ServiceUnavailable 指示服务器暂时不可用,通常是由于过多加载或维护。

GatewayTimeout

等效于 HTTP 状态 504。GatewayTimeout 指示中间代理服务器在等待来自另一个代理或原始服务器的响应时已超时。

HttpVersionNotSupported

等效于 HTTP 状态 505。HttpVersionNotSupported 指示服务器不支持请求的 HTTP 版本。

相关推荐

自卑的人容易患抑郁症吗?(自卑会导致抑郁吗)

Filephoto[Photo/IC]Lowself-esteemmakesusfeelbadaboutourselves.Butdidyouknowthatovert...

中考典型同(近)义词组(同义词考题)

中考典型同(近)义词组...

WPF 消息传递简明教程(wpf messagebox.show)

...

BroadcastReceiver的原理和使用(broadcast-suppression)

一、使用中注意的几点1.动态注册、静态注册的优先级在AndroidManifest.xml中静态注册的receiver比在代码中用registerReceiver动态注册的优先级要低。发送方在send...

Arduino通过串口透传ESP 13板与java程序交互

ESP13---是一个无线板子,配置通过热点通信Arduino通过串口透传ESP13板与java程序交互...

zookeeper的Leader选举源码解析(zookeeper角色选举角色包括)

作者:京东物流梁吉超zookeeper是一个分布式服务框架,主要解决分布式应用中常见的多种数据问题,例如集群管理,状态同步等。为解决这些问题zookeeper需要Leader选举进行保障数据的强一致...

接待外国人英文口语(接待外国友人的英语口语对话)

接待外国人英文口语询问访客身份:  MayIhaveyourname,please?  请问您贵姓?  Whatcompanyareyoufrom?  您是哪个公司的?  Could...

一文深入理解AP架构Nacos注册原理

Nacos简介Nacos是一款阿里巴巴开源用于管理分布式微服务的中间件,能够帮助开发人员快速实现动态服务发现、服务配置、服务元数据及流量管理等。这篇文章主要剖析一下Nacos作为注册中心时其服务注册与...

Android面试宝典之终极大招(android面试及答案)

以下内容来自兆隆IT云学院就业部,根据多年成功就业服务经验,以及职业素养课程部分内容,归纳总结:18.请描述一下Intent和IntentFilter。Android中通过Intent...

除了Crontab,Swoole Timer也可以实现定时任务的

一般的定时器是怎么实现的呢?我总结如下:1.使用Crontab工具,写一个shell脚本,在脚本中调用PHP文件,然后定期执行该脚本;2.ignore_user_abort()和set_time_li...

Spark源码阅读:DataFrame.collect 作业提交流程思维导图

本文分为两个部分:作业提交流程思维导图关键函数列表作业提交流程思维导图...

使用Xamarin和Visual Studio开发Android可穿戴设备应用

搭建开发环境我们需要做的第一件事情是安装必要的工具。因此,你需要首先安装VisualStudio。如果您使用的是VisualStudio2010,2012或2013,那么请确保它是一个专业版本或...

Android开发者必知的5个开源库(android 开发相关源码精编解析)

过去的时间里,Android开发逐步走向成熟,一个个与Android相关的开发工具也层出不穷。不过,在面对各种新鲜事物时,不要忘了那些我们每天使用的大量开源库。在这里,向大家介绍的就是,在这个任劳任怨...

Android事件总线还能怎么玩?(android实现事件处理的步骤)

顾名思义,AndroidEventBus是一个Android平台的事件总线框架,它简化了Activity、Fragment、Service等组件之间的交互,很大程度上降低了它们之间的耦合,使我们的代码...

Android 开发中文引导-应用小部件

应用小部件是可以嵌入其它应用(例如主屏幕)并收到定期更新的微型应用视图。这些视图在用户界面中被叫做小部件,并可以用应用小部件提供者发布。可以容纳其他应用部件的应用组件叫做应用部件的宿主(1)。下面的截...

取消回复欢迎 发表评论: