zoukankan      html  css  js  c++  java
  • WebUtils-网络请求工具类

    网络请求工具类,大幅代码借鉴aplipay.

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Net;
    using System.Text;
    using System.Web;
    
    namespace ICE.Common
    {
        /// <summary>
        /// 网络工具类。
        /// </summary>
        public sealed class WebUtils
        {
            private int _timeout = 100000;
    
            /// <summary>
            /// 请求与响应的超时时间
            /// </summary>
            public int Timeout
            {
                get { return this._timeout; }
                set { this._timeout = value; }
            }
    
            /// <summary>
            /// 执行HTTP POST请求。
            /// </summary>
            /// <param name="url">请求地址</param>
            /// <param name="parameters">请求参数</param>
            /// <param name="charset">编码字符集</param>
            /// <returns>HTTP响应</returns>
            public string DoPost(string url, IDictionary<string, string> parameters, string charset)
            {
                HttpWebRequest req = GetWebRequest(url, "POST");
                req.ContentType = "application/x-www-form-urlencoded;charset=" + charset;
    
                byte[] postData = Encoding.GetEncoding(charset).GetBytes(BuildQuery(parameters, charset));
                Stream reqStream = req.GetRequestStream();
                reqStream.Write(postData, 0, postData.Length);
                reqStream.Close();
    
                HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();
                Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
                return GetResponseAsString(rsp, encoding);
            }
    
            public string DoPost(string url, string requestBody, string charset)
            {
                HttpWebRequest req = GetWebRequest(url, "POST");
                req.ContentType = "application/x-www-form-urlencoded;charset=" + charset;
    
                byte[] postData = Encoding.GetEncoding(charset).GetBytes(requestBody);
                Stream reqStream = req.GetRequestStream();
                reqStream.Write(postData, 0, postData.Length);
                reqStream.Close();
    
                HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();
                Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
                return GetResponseAsString(rsp, encoding);
            }
    
            /// <summary>
            /// 执行HTTP GET请求。
            /// </summary>
            /// <param name="url">请求地址</param>
            /// <param name="parameters">请求参数</param>
            /// <param name="charset">编码字符集</param>
            /// <returns>HTTP响应</returns>
            public string DoGet(string url, IDictionary<string, string> parameters, string charset)
            {
                if (parameters != null && parameters.Count > 0)
                {
                    if (url.Contains("?"))
                    {
                        url = url + "&" + BuildQuery(parameters,charset);
                    }
                    else
                    {
                        url = url + "?" + BuildQuery(parameters, charset);
                    }
                }
    
                HttpWebRequest req = GetWebRequest(url, "GET");
                req.ContentType = "application/x-www-form-urlencoded;charset=" + charset;
    
                HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();
                Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
                return GetResponseAsString(rsp, encoding);
            }         
    
            public HttpWebRequest GetWebRequest(string url, string method)
            {
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                req.ServicePoint.Expect100Continue = false;
                req.Method = method;
                req.KeepAlive = true;
                req.UserAgent = "Aop4Net";
                req.Timeout = this._timeout;
                return req;
            }
    
            /// <summary>
            /// 把响应流转换为文本。
            /// </summary>
            /// <param name="rsp">响应流对象</param>
            /// <param name="encoding">编码方式</param>
            /// <returns>响应文本</returns>
            public string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
            {
                StringBuilder result = new StringBuilder();
                Stream stream = null;
                StreamReader reader = null;
    
                try
                {
                    // 以字符流的方式读取HTTP响应
                    stream = rsp.GetResponseStream();
                    reader = new StreamReader(stream, encoding);
    
                    // 按字符读取并写入字符串缓冲
                    int ch = -1;
                    while ((ch = reader.Read()) > -1)
                    {
                        // 过滤结束符
                        char c = (char)ch;
                        if (c != '')
                        {
                            result.Append(c);
                        }
                    }
                }
                finally
                {
                    // 释放资源
                    if (reader != null) reader.Close();
                    if (stream != null) stream.Close();
                    if (rsp != null) rsp.Close();
                }
    
                return result.ToString();
            }
    
            /// <summary>
            /// 组装普通文本请求参数。
            /// </summary>
            /// <param name="parameters">Key-Value形式请求参数字典</param>
            /// <returns>URL编码后的请求数据</returns>
            public static string BuildQuery(IDictionary<string, string> parameters, string charset)
            {
                StringBuilder postData = new StringBuilder();
                bool hasParam = false;
    
                IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();
                while (dem.MoveNext())
                {
                    string name = dem.Current.Key;
                    string value = dem.Current.Value;
                    // 忽略参数名或参数值为空的参数
                    if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))
                    {
                        if (hasParam)
                        {
                            postData.Append("&");
                        }
    
                        postData.Append(name);
                        postData.Append("=");
    
                        string encodedValue = HttpUtility.UrlEncode(value, Encoding.GetEncoding(charset));
    
                        postData.Append(encodedValue);
                        hasParam = true;
                    }
                }
    
                return postData.ToString();
            }
        }
    }
    

      

  • 相关阅读:
    linux执行命令并获取结果(system)
    awk----基本用法
    shell用法总结
    autoit(au3)使用说明
    博客搜集
    vi常用快捷键总结
    python简单学------------程序传参数,列表推导式,set、list、tuple 转换
    python简单学------------模块
    python简单学------------python面向对象(3)
    python简单学------------python面向对象(2)
  • 原文地址:https://www.cnblogs.com/ICE_Inspire/p/5556583.html
Copyright © 2011-2022 走看看