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":"李广"}");
  • 相关阅读:
    嵌入式系统编程和调试技巧
    使用Kotlin开发Android应用(II):创建新project
    2015 Multi-University Training Contest 2
    C#开发Unity游戏教程之游戏对象的属性变量
    Java开发project师案例-网络日志分析系统
    Flask
    Flask
    Flask
    Flask
    Flask
  • 原文地址:https://www.cnblogs.com/daimaxuejia/p/12867151.html
Copyright © 2011-2022 走看看