zoukankan      html  css  js  c++  java
  • C# 接口的Get、Post、WebService请求方法一览,值得收藏

    C# 接口的Get、Post、WebService请求方法一览,值得收藏

    public static class HttpHelper
        {
            const string DEFAULT_USER_AGENT = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 4.0.30319)";
            const string DEFAULT_CONTENT_TYPE = "application/json";
    
            #region Http Get Method
            /// <summary>
            /// GET请求
            /// </summary>
            /// <param name="url"></param>
            /// <returns></returns>
            public static string Get(string url)
            {
                return Get(url, null);
            }
    
            /// <summary>
            /// GET请求,可以添加自定义的Header信息
            /// </summary>
            /// <returns></returns>
            public static string Get(string url, IDictionary<string, string> headerList)
            {
                var request = (HttpWebRequest)WebRequest.Create(url);
                request.UserAgent = DEFAULT_USER_AGENT;
                request.ContentType = DEFAULT_CONTENT_TYPE;
                if (headerList != null)
                {
                    foreach (var header in headerList)
                    {
                        request.Headers.Add(header.Key, header.Value);
                    }
                }
    
                var responseStream = request.GetResponse().GetResponseStream();
    
                using (var reader = new StreamReader(responseStream))
                {
                    var result = reader.ReadToEnd();
    
                    responseStream.Close();
    
                    return result;
                }
            }
            #endregion
    
            /// <summary>
            /// POST请求
            /// </summary>
            /// <param name="url"></param>
            /// <param name="postData"></param>
            /// <param name="contentType"></param>
            /// <returns></returns>
            public static string Post(string url, string postData, string contentType = DEFAULT_CONTENT_TYPE)
            {
                var webClient = new WebClient();
                webClient.Headers.Add("user-agent", DEFAULT_USER_AGENT);
                webClient.Headers.Add("Content-Type", contentType);
                byte[] sendData = Encoding.UTF8.GetBytes(postData);
                byte[] responseData = webClient.UploadData(url, "POST", sendData);
                return Encoding.UTF8.GetString(responseData);
            }
    
            /// <summary>
            /// POST请求,并可以传入Header信息
            /// </summary>
            /// <param name="url"></param>
            /// <param name="postData"></param>
            /// <param name="headParams"></param>
            /// <returns></returns>
            public static string Post(string url, string postData, IDictionary<string, string> headParams)
            {
                var webClient = new WebClient();
                webClient.Headers.Add("user-agent", DEFAULT_USER_AGENT);
                webClient.Headers.Add("Content-Type", DEFAULT_CONTENT_TYPE);
                if (headParams != null && headParams.Count > 0)
                {
                    foreach (var item in headParams)
                    {
                        if (webClient.Headers.AllKeys.Contains(item.Key))
                        {
                            webClient.Headers.Remove(item.Key);
                        }
                        webClient.Headers.Add(item.Key, item.Value);
                    }
                }
    
                byte[] sendData = Encoding.UTF8.GetBytes(postData);
                byte[] responseData = webClient.UploadData(url, "POST", sendData);
                return Encoding.UTF8.GetString(responseData);
            }
    
            /// <summary>
            /// HTTP Post请求,可以传入Header信息和超时限制
            /// </summary>
            /// <param name="url"></param>
            /// <param name="content"></param>
            /// <param name="headParams"></param>
            /// <param name="timeout"></param>
            /// <returns></returns>
            public static string HttpPost(string url, string content,string ContentType, IDictionary<string, string> headParams,int timeout)
            {
                try
                {
                    string result = string.Empty;
                   
                    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                    req.Method = "POST";
                    req.ContentType = ContentType;
                    if (headParams != null && headParams.Count > 0)
                    {
                        foreach (var item in headParams)
                        {
                            if (req.Headers.AllKeys.Contains(item.Key))
                            {
                                req.Headers.Remove(item.Key);
                            }
                            req.Headers.Add(item.Key, item.Value);
                        }
                    }
    
                    byte[] data = Encoding.UTF8.GetBytes(content);
                    req.ContentLength = data.Length;
                    req.Timeout = timeout * 1000;
                    using (Stream reqStream = req.GetRequestStream())
                    {
                        reqStream.Write(data, 0, data.Length);
                        reqStream.Close();
                    }
    
                    HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                    Stream stream = resp.GetResponseStream();
                    //获取响应内容
                    using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                    {
                        result = reader.ReadToEnd();
                    }
                    return result;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
            /// <summary>
            /// 需要WebService支持Get调用
            /// </summary>
            public static string WebServiceGet(String url, String methodname, Hashtable pars)
            {
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url + "/" + methodname + "?" + HashtableToPostData(pars));
                request.Method = "GET";
                request.ContentType = "application/x-www-form-urlencoded";
                // 凭证
                request.Credentials = CredentialCache.DefaultCredentials;
                //超时时间
                request.Timeout = 10000;
                var response = request.GetResponse();
                var stream = response.GetResponseStream();
                StreamReader sr = new StreamReader(stream, Encoding.UTF8);
                String retXml = sr.ReadToEnd();
                sr.Close();
                return retXml;
            }
           
            /// <summary>
            /// 需要WebService支持Post调用
            /// </summary>
            public static string PostWebServiceByJson(String url, String methodname, Hashtable pars)
            {
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url + "/" + methodname);
                request.Method = "POST";
                request.ContentType = "application/json;charset=utf-8";
                request.Credentials = CredentialCache.DefaultCredentials;
                request.Timeout = 10000;
                byte[] data = Encoding.UTF8.GetBytes(HashtableToPostData(pars));
                request.ContentLength = data.Length;
                Stream writer = request.GetRequestStream();
                writer.Write(data, 0, data.Length);
                writer.Close();
    
                StreamReader sr = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8);
                string retXml = sr.ReadToEnd();
                sr.Close();
                return retXml;
            }
    
            /// <summary>    
            /// http Post调用  WebService  
            /// </summary>    
            public static XmlDocument QueryPostWebService(String URL,
                String MethodName, Hashtable Pars) {
    
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.Credentials = CredentialCache.DefaultCredentials;
                request.Timeout = 10000;
                #region 参数拼接成字符串,最后编码
                StringBuilder sb = new StringBuilder();
                foreach (string k in Pars.Keys) {
                    if (sb.Length > 0) {
                        sb.Append("&");
                    }
                    sb.Append(
                        HttpUtility.UrlEncode(k) + "="
                        + HttpUtility.UrlEncode(Pars[k].ToString())
                        );
                }
                byte[] data = Encoding.UTF8.GetBytes(sb.ToString());
                #endregion
                #region  把编码后的参数写入请求流中
                request.ContentLength = data.Length;
                Stream writer = request.GetRequestStream();
                writer.Write(data, 0, data.Length);
                writer.Close();
                #endregion
                #region 读取结果,创建XmlDocument对象,对象加载结果
                var response = request.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                String retXml = sr.ReadToEnd();
                sr.Close();
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(retXml);
                #endregion
                return doc;
            }
    
            private static String HashtableToPostData(Hashtable ht)
            {
                StringBuilder sb = new StringBuilder();
                foreach (string k in ht.Keys)
                {
                    if (sb.Length > 0)
                    {
                        sb.Append("&");
                    }
                    sb.Append(HttpUtility.UrlEncode(k) + "=" + HttpUtility.UrlEncode(ht[k].ToString()));
                }
                return sb.ToString();
            } 
            
        }
  • 相关阅读:
    跳转练习
    从入门到自闭之Python--Redis
    从入门到自闭之Python--Django Rest_Framework
    从入门到自闭之Python--RESTful API规范与序列化
    从入门到自闭之Python--虚拟环境如何安装
    从入门到自闭之Python集合,深浅拷贝(大坑)
    从入门到自闭之Python编码
    从入门到自闭之Python字典如何使用
    从入门到自闭之Python列表,元祖及range
    从入门到自闭之Python整型,字符串以及for循环
  • 原文地址:https://www.cnblogs.com/parkerchen/p/13581068.html
Copyright © 2011-2022 走看看