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

C# HttpWebRequest HttpHelper 类

yuyutoo 2024-10-11 23:57 1 浏览 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 版本。

相关推荐

jQuery VS AngularJS 你更钟爱哪个?

在这一次的Web开发教程中,我会尽力解答有关于jQuery和AngularJS的两个非常常见的问题,即jQuery和AngularJS之间的区别是什么?也就是说jQueryVSAngularJS?...

Jquery实时校验,指定长度的「负小数」,小数位未满末尾补0

在可以输入【负小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码...

如何在pbootCMS前台调用自定义表单?pbootCMS自定义调用代码示例

要在pbootCMS前台调用自定义表单,您需要在后台创建表单并为其添加字段,然后在前台模板文件中添加相关代码,如提交按钮和表单验证代码。您还可以自定义表单数据的存储位置、添加文件上传字段、日期选择器、...

编程技巧:Jquery实时验证,指定长度的「负小数」

为了保障【负小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【负小数】的方法。HTML代码<inputtype="text"class="forc...

一篇文章带你用jquery mobile设计颜色拾取器

【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...

编程技巧:Jquery实时验证,指定长度的「正小数」

为了保障【正小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【正小数】的方法。HTML做成方法<inputtype="text"class="fo...

jquery.validate检查数组全部验证

问题:html中有多个name[],每个参数都要进行验证是否为空,这个时候直接用required:true话,不能全部验证,只要这个数组中有一个有值就可以通过的。解决方法使用addmethod...

Vue进阶(幺叁肆):npm查看包版本信息

第一种方式npmviewjqueryversions这种方式可以查看npm服务器上所有的...

layui中使用lay-verify进行条件校验

一、layui的校验很简单,主要有以下步骤:1.在form表单内加上class="layui-form"2.在提交按钮上加上lay-submit3.在想要校验的标签,加上lay-...

jQuery是什么?如何使用? jquery是什么功能组件

jQuery于2006年1月由JohnResig在BarCampNYC首次发布。它目前由TimmyWilson领导,并由一组开发人员维护。jQuery是一个JavaScript库,它简化了客户...

django框架的表单form的理解和用法-9

表单呈现...

jquery对上传文件的检测判断 jquery实现文件上传

总体思路:在前端使用jquery对上传文件做部分初步的判断,验证通过的文件利用ajaxFileUpload上传到服务器端,并将文件的存储路径保存到数据库。<asp:FileUploadI...

Nodejs之MEAN栈开发(四)-- form验证及图片上传

这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...

大数据开发基础之JAVA jquery 大数据java实战

上一篇我们讲解了JAVAscript的基础知识、特点及基本语法以及组成及基本用途,本期就给大家带来了JAVAweb的第二个知识点jquery,大数据开发基础之JAVAjquery,这是本篇文章的主要...

推荐四个开源的jQuery可视化表单设计器

jquery开源在线表单拖拉设计器formBuilder(推荐)jQueryformBuilder是一个开源的WEB在线html表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...

取消回复欢迎 发表评论: