zoukankan      html  css  js  c++  java
  • HttpHelper

    model

    #region << 版 本 注 释 >>
    /****************************************************
    * 文 件 名:
    * Copyright(c) www.ITdos.com
    * CLR 版本: 4.0.30319.17929
    * 创 建 人:ITdos
    * 电子邮箱:admin@itdos.com
    * 创建日期:2014/10/1 11:00:49
    * 文件描述:
    ******************************************************
    * 修 改 人:
    * 修改日期:
    * 备注描述:
    *******************************************************/
    #endregion
    
    using System.Net;
    using System.Text;
    using System.Web;
    using GT.Common.Common;
    
    namespace GT.Common.Model
    {
        /// <summary>
        /// 
        /// </summary>
        public class HttpParam
        {
            /// <summary>
            /// GET/POST
            /// </summary>
            public string Method { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public string Url { get; set; }
            /// <summary>
            /// 参数类型。可选:Json、Form。默认Json。传入Form则会将new { Key1 = Value1, Key2 = Value2}转换成"key1=value1&key2=value2"形式。
            /// </summary>
            public EnumHelper.HttpParamType ParamType { get; set; }
            /// <summary>
            /// Post参数。
            /// <para>可以传入Json对像:new { Key1 = Value1, Key2 = Value2}</para>
            /// <para>可以传入Json字符串:{"Key1":"Value1","Key2":"Value2"}</para>
            /// <para>可以传入key/value字符串:"key1=value1&key2=value2"</para>
            /// <para>可以传入xml字符串等等</para>
            /// </summary>
            public object PostParam { get; set; }
            /// <summary>
            /// Get参数
            /// <para>可以传入Json对像:new { Key1 = Value1, Key2 = Value2}</para>
            /// <para>可以传入Json字符串:{"Key1":"Value1","Key2":"Value2"}</para>
            /// </summary>
            public object GetParam { get; set; }
           
            private int _timeOut = 5;
            /// <summary>
            /// 请求超时时间。单位:秒。默认值5秒。
            /// </summary>
            public int TimeOut
            {
                get { return _timeOut; }
                set { _timeOut = value; }
            }
            private Encoding _encoding = Encoding.UTF8;
            /// <summary>
            /// 
            /// </summary>
            public Encoding Encoding
            {
                get { return _encoding; }
                set { _encoding = value; }
            }
            /// <summary>
            /// 
            /// </summary>
            public CookieContainer CookieContainer { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string Referer { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string CertPath { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string CertPwd { get; set; }
            private string _contentType = "application/json";
            /// <summary>
            /// 
            /// </summary>
            public string ContentType
            {
                get { return _contentType; }
                set { _contentType = value; }
            }
            private string _userAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Maxthon/4.1.2.4000 Chrome/26.0.1410.43 Safari/537.1";
            /// <summary>
            /// 
            /// </summary>
            public string UserAgent
            {
                get { return _userAgent; }
                set { _userAgent = value; }
            }
            /// <summary>
            /// 
            /// </summary>
            public HttpPostedFileBase PostedFile { get; set; }
        }
    }

    帮助类

    #region << 版 本 注 释 >>
    /****************************************************
    * 文 件 名:EncryptHelper
    * Copyright(c) www.ITdos.com
    * CLR 版本: 4.0.30319.17929
    * 创 建 人:ITdos
    * 电子邮箱:admin@itdos.com
    * 创建日期:2014/10/1 11:00:49
    * 文件描述:
    ******************************************************
    * 修 改 人:
    * 修改日期:
    * 备注描述:
    *******************************************************/
    #endregion
    
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Net.Security;
    using System.Security.Cryptography.X509Certificates;
    using System.Text;
    using GT.Common.Common;
    using GT.Common.JsonHelper;
    using GT.Common.Model;
    
    namespace GT.Common.Helper
    {
        /// <summary>
        /// 
        /// </summary>
        public class HttpHelper
        {
            /// <summary>
            /// 
            /// </summary>
            /// <param name="url"></param>
            /// <returns></returns>
            public static Stream GetStream(string url)
            {
                return RequestStream(new HttpParam()
                {
                    Url = url,
                    Method = "GET"
                });
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="url"></param>
            /// <param name="getParam"></param>
            /// <returns></returns>
            public static Stream GetStream(string url, object getParam)
            {
                return RequestStream(new HttpParam()
                {
                    Url = url,
                    Method = "GET",
                    GetParam = getParam
                });
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="url"></param>
            /// <returns></returns>
            public static Stream PostStream(string url)
            {
                return RequestStream(new HttpParam()
                {
                    Url = url,
                    Method = "POST"
                });
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="url"></param>
            /// <param name="postParam"></param>
            /// <returns></returns>
            public static Stream PostStream(string url, object postParam)
            {
                return RequestStream(new HttpParam()
                {
                    Url = url,
                    Method = "POST",
                    GetParam = postParam
                });
            }
            /// <summary>
            /// 文件上传至远程服务器。传入:Url、CookieContainer、PostParam、PostedFile
            /// </summary>
            public static string PostFile(HttpParam param)
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(param.Url);
                request.CookieContainer = param.CookieContainer;
                request.Method = "POST";
                request.Timeout = 20000;
                request.Credentials = System.Net.CredentialCache.DefaultCredentials;
                request.KeepAlive = true;
                var boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
                var boundaryBytes = System.Text.Encoding.ASCII.GetBytes("
    --" + boundary + "
    ");
                request.ContentType = "multipart/form-data; boundary=" + boundary;
                var formdataTemplate = "
    --" + boundary + "
    Content-Disposition: form-data; name="{0}";
    
    {1}";
                var buffer = new byte[param.PostedFile.ContentLength];
                param.PostedFile.InputStream.Read(buffer, 0, buffer.Length);
                var strHeader = "Content-Disposition:application/x-www-form-urlencoded; name="{0}";filename="{1}"
    Content-Type:{2}
    
    ";
                strHeader = string.Format(strHeader,
                                         "filedata",
                                         param.PostedFile.FileName,
                                         param.PostedFile.ContentType);
                var byteHeader = ASCIIEncoding.ASCII.GetBytes(strHeader);
                try
                {
                    using (var stream = request.GetRequestStream())
                    {
                        if (param.PostParam != null)
                        {
                            var postParamString = "";
                            if (param.PostParam is string)
                            {
                                postParamString = param.PostParam.ToString();
                            }
                            else
                            {
                                postParamString = JSON.ToJSON(param.PostParam);
                            }
                            var bs = param.Encoding.GetBytes(postParamString);
                            stream.Write(bs, 0, bs.Length);
                        }
                        stream.Write(boundaryBytes, 0, boundaryBytes.Length);
                        stream.Write(byteHeader, 0, byteHeader.Length);
                        stream.Write(buffer, 0, buffer.Length);
                        var trailer = Encoding.ASCII.GetBytes("
    --" + boundary + "--
    ");
                        stream.Write(trailer, 0, trailer.Length);
                        stream.Close();
                    }
                    var response = (HttpWebResponse)request.GetResponse();
                    var result = "";
                    using (var reader = new StreamReader(response.GetResponseStream()))
                    {
                        result = reader.ReadToEnd();
                    }
                    response.Close();
                    return result;
                }
                catch (Exception ex)
                {
                    return ex.ToString();
                }
            }
            /// <summary>
            /// 获取响应流
            /// </summary>
            /// <param name="param"></param>
            /// <returns></returns>
            public static Stream RequestStream(HttpParam param)
            {
                #region 处理地址栏参数
                var getParamSb = new StringBuilder();
                if (param.GetParam != null)
                {
                    if (param.GetParam is string)
                    {
                        getParamSb.Append(param.GetParam.ToString());
                    }
                    else
                    {
                        param.GetParam.GetType().GetProperties().ToList().ForEach(d =>
                        {
                            getParamSb.AppendFormat("{0}={1}&", d.Name, d.GetValue(param.GetParam, null));
                        });
                    }
                }
                if (!string.IsNullOrWhiteSpace(getParamSb.ToString().TrimEnd('&')))
                {
                    param.Url = string.Format("{0}?{1}", param.Url, getParamSb.ToString().TrimEnd('&'));
                }
                #endregion
                var r = WebRequest.Create(param.Url) as HttpWebRequest;
                if (!string.IsNullOrWhiteSpace(param.CertPath) && !string.IsNullOrWhiteSpace(param.CertPwd))
                {
                    ServicePointManager.ServerCertificateValidationCallback = CheckValidationResult;
                    var cer = new X509Certificate2(param.CertPath, param.CertPwd, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
                    r.ClientCertificates.Add(cer);
                    #region 暂时不要的
                    //ServicePointManager.Expect100Continue = true;
                    //ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
                    //req.ProtocolVersion = HttpVersion.Version11;
                    //req.UserAgent = SUserAgent;
                    //req.KeepAlive = false;
                    //var cookieContainer = new CookieContainer();
                    //req.CookieContainer = cookieContainer;
                    //req.Timeout = 1000 * 60;
                    //req.Headers.Add("x-requested-with", "XMLHttpRequest");
                    #endregion
                }
                r.Timeout = param.TimeOut * 10000;
                r.UserAgent = param.UserAgent;
                r.Method = param.Method ?? "POST";
                r.Referer = param.Referer;
                r.CookieContainer = param.CookieContainer;
                r.ContentType = param.ContentType;
                if (param.PostParam != null)
                {
                    var postParamString = "";
                    if (param.PostParam is string)
                    {
                        postParamString = param.PostParam.ToString();
                    }
                    else if (param.ParamType == EnumHelper.HttpParamType.Form)
                    {
                        var dicParam = JSON.ToObject<Dictionary<string,string>>(JSON.ToJSON(param.PostParam));
                        postParamString = dicParam.Aggregate(postParamString, (current, dic) => current + (dic.Key + "=" + dic.Value + "&")).TrimEnd('&');
                    }
                    else
                    {
                        postParamString = JSON.ToJSON(param.PostParam);
                    }
                    var bs = param.Encoding.GetBytes(postParamString);
                    r.ContentLength = bs.Length;
                    using (var rs = r.GetRequestStream())
                    {
                        rs.Write(bs, 0, bs.Length);
                    }
                }
                return r.GetResponse().GetResponseStream();
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="param"></param>
            public static string RequestString(HttpParam param)
            {
                var result = "";
                using (var reader = new StreamReader(RequestStream(param), param.Encoding))
                {
                    result = reader.ReadToEnd();
                }
                return result;
            }
    
            #region Get请求
            /// <summary>
            /// 
            /// </summary>
            /// <param name="url"></param>
            /// <returns></returns>
            public static string Get(string url)
            {
                return Get(new HttpParam()
                {
                    Url = url,
                    Method = "GET"
                });
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="url"></param>
            /// <param name="getParam"></param>
            /// <returns></returns>
            public static string Get(string url, object getParam)
            {
                var param = new HttpParam
                {
                    Url = url,
                    Method = "GET",
                    GetParam = getParam
                };
                return Get(param);
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="param"></param>
            /// <returns></returns>
            public static string Get(HttpParam param)
            {
                param.Method = "GET";
                return RequestString(param);
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="url"></param>
            /// <returns></returns>
            public static T Get<T>(string url)
            {
                var str = Get(new HttpParam()
                {
                    Url = url,
                    Method = "GET"
                });
                return JSON.ToObject<T>(str);
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="url"></param>
            /// <param name="getParam"></param>
            /// <returns></returns>
            public static T Get<T>(string url, object getParam)
            {
                var param = new HttpParam
                {
                    Url = url,
                    Method = "GET",
                    GetParam = getParam
                };
                var str = Get(param);
                return JSON.ToObject<T>(str);
            }
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="param"></param>
            /// <returns></returns>
            public static T Get<T>(HttpParam param)
            {
                var str = Get(param);
                return JSON.ToObject<T>(str);
            }
            #endregion
    
            #region Post 请求
            /// <summary>
            /// 
            /// </summary>
            /// <param name="url"></param>
            /// <returns></returns>
            public static string Post(string url)
            {
                var str = Post(new HttpParam()
                {
                    Url = url,
                    Method = "POST"
                });
                return str;
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="url"></param>
            /// <param name="postParam"></param>
            /// <returns></returns>
            public static string Post(string url, object postParam)
            {
                var param = new HttpParam
                {
                    Url = url,
                    Method = "POST",
                    PostParam = postParam
                };
                var str = Post(param);
                return str;
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="param"></param>
            /// <returns></returns>
            public static string Post(HttpParam param)
            {
                param.Method = "POST";
                var str = RequestString(param);
                return str;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="url"></param>
            /// <returns></returns>
            public static T Post<T>(string url)
            {
                var str = Post(new HttpParam()
                {
                    Url = url,
                    Method = "POST"
                });
                return JSON.ToObject<T>(str);
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="url"></param>
            /// <param name="postParam"></param>
            /// <returns></returns>
            public static T Post<T>(string url, object postParam)
            {
                var param = new HttpParam
                {
                    Url = url,
                    Method = "POST",
                    PostParam = postParam
                };
                var str = Post(param);
                return JSON.ToObject<T>(str);
            }
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="param"></param>
            /// <returns></returns>
            public static T Post<T>(HttpParam param)
            {
                param.Method = "POST";
                var str = Post(param);
                return JSON.ToObject<T>(str);
            }
            private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
            {
                return true;
            }
            #endregion
        }
    }

    调用

      string result= HttpHelper.Post("http://localhost:43041/api/Business/GetStudentList", "{"json":"李广"}");
  • 相关阅读:
    git(1)-git关联GitHub-windows-转载
    jenkins(4)-jenkins配置邮件通知
    jenkins(3)-linux下安装jenkins(yum install方式)
    【PAT甲级】1090 Highest Price in Supply Chain (25 分)(DFS)
    【PAT甲级】1087 All Roads Lead to Rome (30 分)(MAP【int,string】,邻接表,DFS,模拟,SPFA)
    【PAT甲级】1018 Public Bike Management (30 分)(DFS,SPFA)
    Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
    Atcoder Grand Contest 032C(欧拉回路,DFS判环)
    Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
    Atcoder Grand Contest 031C(构造,思维,异或,DFS)
  • 原文地址:https://www.cnblogs.com/daimaxuejia/p/12867151.html
Copyright © 2011-2022 走看看