zoukankan      html  css  js  c++  java
  • .NET HTTP通用请求方法get/post

    .NET HTTP通用请求方法get/post

    public class HttpHelper
        {
            /// <summary>
            /// 发起Http请求
            /// </summary>
            /// <param name="requestDto">请求实体</param>
            /// <returns></returns>
            public static HttpReturnDto<object> DoHttp(HttpRequestDto requestDto)
            {
                var msg = new HttpReturnDto<object>();
                if (requestDto == null || string.IsNullOrEmpty(requestDto.Url) || string.IsNullOrEmpty(requestDto.Method))
                {
                    msg.IsSuccess = false;
                    msg.Message = "请求参数没有全部提供";
                    return msg;
                }
                HttpWebRequest httpRequest = GetHttpRequest(requestDto);
                try
                {
                    if (httpRequest != null)
                    {
                        var response = (HttpWebResponse)httpRequest.GetResponse();
                        var streamIn = response.GetResponseStream();
                        if (streamIn != null)
                        {
                            var reader = new StreamReader(streamIn);
                            msg.Data = reader.ReadToEnd();
                            reader.Close();
                            streamIn.Close();
                            response.Close();
    
                            msg.IsSuccess = true;
                            msg.Message = "执行成功";
                        }
                    }
                }
                catch (Exception ex)
                {
                    msg.IsSuccess = false;
                    msg.Message = ex.Message;
                    return msg;
                }
                return msg;
            }
    
            /// <summary>
            /// 初始化http请求
            /// </summary>
            /// <param name="requestDto"></param>
            /// <returns></returns>
            private static HttpWebRequest GetHttpRequest(HttpRequestDto requestDto)
            {
                var config = requestDto.HttpConfigDto ?? new HttpConfig();
                HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(requestDto.Url);
                httpRequest.Method = requestDto.Method;
                httpRequest.Referer = config.Referer;
                //有些页面不设置用户代理信息则会抓取不到内容
                httpRequest.UserAgent = config.UserAgent;
                httpRequest.Timeout = config.Timeout;
                httpRequest.Accept = config.Accept;
                httpRequest.Headers.Set("Accept-Encoding", config.AcceptEncoding);
                httpRequest.ContentType = config.ContentType;
                httpRequest.KeepAlive = config.KeepAlive;
    
                switch (requestDto.Method.ToUpper())
                {
                    case "POST":
                        requestDto.Data = requestDto.Data ?? "";
                        var bData = Encoding.UTF8.GetBytes(requestDto.Data);
                        httpRequest.ContentType = "application/xml;charset=utf-8";
                        httpRequest.ContentLength = bData.Length;
                        var streamOut = httpRequest.GetRequestStream();
                        streamOut.Write(bData, 0, bData.Length);
                        streamOut.Close();
                        break;
                }
                return httpRequest;
            }
        }
    
    
        public class HttpConfig
        {
            public string Referer { get; set; }
    
            /// <summary>
            /// 默认(text/html)
            /// </summary>
            public string ContentType { get; set; }
    
            public string Accept { get; set; }
    
            public string AcceptEncoding { get; set; }
    
            /// <summary>
            /// 超时时间(毫秒)默认100000
            /// </summary>
            public int Timeout { get; set; }
    
            public string UserAgent { get; set; }
    
            /// <summary>
            /// POST请求时,数据是否进行gzip压缩
            /// </summary>
            public bool GZipCompress { get; set; }
    
            public bool KeepAlive { get; set; }
    
            public string CharacterSet { get; set; }
    
            public HttpConfig()
            {
                this.Timeout = 2100000000;
                this.ContentType = "text/html; charset=" + Encoding.UTF8.WebName;
                this.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36";
                this.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
                this.AcceptEncoding = "gzip,deflate";
                this.GZipCompress = false;
                this.KeepAlive = true;
                this.CharacterSet = "UTF-8";
            }
        }
    
        /// <summary>
        /// 返回信息实体
        /// </summary>
        public class HttpRequestDto
        {
            /// <summary>
            /// 请求地址
            /// </summary>
            public string Url { get; set; }
            //请求数据
            public string Data { get; set; }
            /// <summary>
            /// 请求方法post/get
            /// </summary>
            public string Method { get; set; }
            /// <summary>
            /// 请求方法post/get
            /// </summary>
            public HttpConfig HttpConfigDto { get; set; }
        }
    
        /// <summary>
        /// 返回信息实体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class HttpReturnDto<T>
        {
            public HttpReturnDto()
            {
                IsSuccess = false;
                Message = "操作失败";
            }
            //是否执行成功
            public bool IsSuccess { get; set; }
            //编码
            public string Code { get; set; }
            //信息
            public string Message { get; set; }
            //返回数据
            public T Data { get; set; }
        }

  • 相关阅读:
    10个超实用的PHP代码片段
    MySQL支撑百万级流量高并发的网站部署详解
    程序员总结:帮助你早些明白一些道理
    50个最常用的UNIX / Linux命令(结合实例)
    php.ini 核心配置选项说明
    智能指针的死穴 循环引用
    滥用vector带来的瓶颈
    JS——层的遮罩效果
    【趣】无广告看视频
    【SQLServer】远程访问数据库进行配置
  • 原文地址:https://www.cnblogs.com/jiangqw/p/12121230.html
Copyright © 2011-2022 走看看