zoukankan      html  css  js  c++  java
  • c# http请求封装

    public class NewHttpClient2
        {
            public enum BodyFormat
            {
                Formed, Json
            }
            public BodyFormat BodyType;
            public string Method;
            public Uri Uri;
            public Encoding ContentEncoding;
            public Dictionary<string, object> Bodys;
            public Dictionary<string, string> Headers;
            public Dictionary<string, string> Querys;
            public int Timeout;
            private NewHttpClient2()
            {
                BodyType = BodyFormat.Formed;
                Method = "GET";
                ContentEncoding = Encoding.UTF8;
                Bodys = new Dictionary<string, object>();
                Headers = new Dictionary<string, string>();
                Querys = new Dictionary<string, string>();
                ServicePointManager.Expect100Continue = false;
                Timeout = 60000;
            }
            public NewHttpClient2(string uri) : this()
            {
                Uri = new Uri(uri);
            }
            public HttpWebRequest HttpWebRequest;
            public string UriWithQuery
            {
                get
                {
                    return Uri + "?" + Util.ParseQueryString(Querys);
                }
            }
            public JObject PostAction()
            {
                HttpWebRequest = (HttpWebRequest)WebRequest.Create(UriWithQuery);
                HttpWebRequest.Method = Method;
                HttpWebRequest.ReadWriteTimeout = 30000;
                foreach (var header in Headers)
                {
                    HttpWebRequest.Headers.Add(header.Key, header.Value);
                }
                byte[] body = null;
                switch (BodyType)
                {
                    case BodyFormat.Formed:
                        {
                            var bodydata = Bodys.Select(pair => pair.Key + "=" + Util.UriEncode(pair.Value.ToString()))
                                .DefaultIfEmpty("")
                                .Aggregate((a, b) => a + "&" + b);
                            body = ContentEncoding.GetBytes(bodydata);
                            HttpWebRequest.ContentType = "application/x-www-form-urlencoded";
                            break;
                        }
                    case BodyFormat.Json:
                        {
                            var bodydata = JsonConvert.SerializeObject(Bodys);
                            body = ContentEncoding.GetBytes(bodydata);
                            HttpWebRequest.ContentType = "application/json";
                            break;
                        }
                }
                if (body != null && Bodys.Count > 0)
                {
                    var stream = HttpWebRequest.GetRequestStream();
                    stream.Write(body, 0, body.Length);
                    stream.Close();
                }
                HttpWebResponse webresp;
                try
                {
                    webresp = (HttpWebResponse)HttpWebRequest.GetResponse();
                }
                catch (WebException e)
                {
                    //请求失败
                    throw new ApiException((int)e.Status, e.Message);
                }
                if (webresp.StatusCode != HttpStatusCode.OK)
                {
                    throw new ApiException((int)webresp.StatusCode, "Server response code:" + (int)webresp.StatusCode);
                }
                var respdata = Util.StreamToString(webresp.GetResponseStream(), ContentEncoding);
                JObject respJobject;
                try
                {
                    respJobject = JsonConvert.DeserializeObject<JObject>(respdata);
                }
                catch (Exception e)
                {
                    throw new ApiException(e.Message + ":" + respdata);
                }
                if (respJobject == null)
                {
                    throw new ApiException("Empty response!");
                }
                return respJobject;
            }
        }
    
    
    try
                {
                    var a = new NewHttpClient2("http://localhost:100/.well-known/openid-configuration");
                    var b = a.PostAction();
                    var c = new NewHttpClient2(b["token_endpoint"].ToString())
                    {
                        Bodys = new Dictionary<string, object> { { "scope", "api1" }, { "grant_type", "password" },{"client_id","ro.client" },
                            {"client_secret","secret" },{ "username","alice"},{"password","password" } },
                        Method = "POST"
                    };
                    var d = c.PostAction();
                    var e = new NewHttpClient2("http://localhost:101/api/values/get") {
                        BodyType=NewHttpClient2.BodyFormat.Json,
                        Headers=new Dictionary<string, string> { {"Authorization", d["token_type"].ToString() + " " + d["access_token"].ToString() } }
                    };
                    var f = e.PostAction();
                    return Ok(f);
                }
                catch (ApiException e)
                {
                    return Ok(e);
                }
                catch(Exception e)
                {
                    return Ok(e);
                }
    [Serializable]
        public class ApiException:Exception
        {
            public int Code { get; set; }
            public ApiException()
            {
                Code = -1;
            }
            public ApiException(string message) : base(message)
            {
    
            }
            public ApiException(int code, string message) : base(message)
            {
                Code = code;
            }
        }
    public static string StreamToString(Stream ss, Encoding enc)
            {
                string ret;
                using (var reader = new StreamReader(ss, enc))
                {
                    ret = reader.ReadToEnd();
                }
                ss.Close();
                return ret;
            }
            public static string UriEncode(string input, bool encodeSlash = false)
            {
                var builder = new StringBuilder();
                foreach (var b in Encoding.UTF8.GetBytes(input))
                    if (b >= 'a' && b <= 'z' || b >= 'A' && b <= 'Z' || b >= '0' && b <= '9' || b == '_' || b == '-' ||
                        b == '~' || b == '.')
                        builder.Append((char)b);
                    else if (b == '/')
                        if (encodeSlash)
                            builder.Append("%2F");
                        else
                            builder.Append((char)b);
                    else
                        builder.Append('%').Append(b.ToString("X2"));
                return builder.ToString();
            }
            public static string ParseQueryString(Dictionary<string, string> querys)
            {
                if (querys.Count == 0)
                    return "";
                return querys
                    .Select(pair => pair.Key + "=" + pair.Value)
                    .Aggregate((a, b) => a + "&" + b);
            }

    又琢磨http新封装方法了,这个,估计更完善些,返回数据默认能转换为jobject,不然修改postaction下

  • 相关阅读:
    javascript获取客户端网卡MAC地址和IP地址和计算机名
    Spring 架包功能详解
    MyEclipse安装插件的另一种方法
    (转载)Struts Spring Hibernate (SSH) 整合实例
    jsp 输出流写中文出现乱码的解决办法
    通过Ssh协议连接到服务器执行执行的指令
    贝叶斯过滤算法
    IntelliJ IDEA 9.0.3配置tomcat5
    (spring+hibernate)java.lang.NoSuchMethodError
    struts1.2总结
  • 原文地址:https://www.cnblogs.com/huanyun/p/11572348.html
Copyright © 2011-2022 走看看