China Union Pay helper

匿名 (未验证) 提交于 2019-12-03 00:09:02
        static string proxyIpAddress = AppConfig.GetProxyIpAddress;         static string proxyUserName = AppConfig.GetProxyUserName;         static string proxyPassword = AppConfig.GetProxyPassword;          static int _timeout = 100000;          #region CUP Method         /// <summary>         /// 请求与响应的超时时间         /// </summary>         static public int Timeout         {             get { return _timeout; }             set { _timeout = value; }         }          /// <summary>         /// 执行HTTP POST请求。         /// </summary>         /// <param name="url">请求地址</param>         /// <param name="parameters">请求参数</param>         /// <returns>HTTP响应</returns>         static public string DoPost(string url, IDictionary<string, string> parameters)         {             string result = string.Empty;             try             {                 HttpWebRequest req = GetWebRequest(url, "POST");                  NetworkCredential proxyCredential = new NetworkCredential();                 proxyCredential.UserName = proxyUserName;                 proxyCredential.Password = proxyPassword;                 req.Credentials = proxyCredential;                  WebProxy proxy = new WebProxy(proxyIpAddress);                 proxy.Credentials = proxyCredential;                 req.Proxy = proxy;                  var httpClientHandler = new HttpClientHandler()                 {                     Proxy = proxy,                 };                 httpClientHandler.PreAuthenticate = true;                 httpClientHandler.UseDefaultCredentials = false;                 httpClientHandler.Credentials = proxyCredential;                 var client = new HttpClient(handler: httpClientHandler, disposeHandler: true);                  var res = client.GetStringAsync(url).Result;                   req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";                  byte[] postData = Encoding.UTF8.GetBytes(BuildQuery(parameters));                 Stream reqStream = req.GetRequestStream();                 reqStream.Write(postData, 0, postData.Length);                 reqStream.Close();                  HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();                 Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);                 result = GetResponseAsString(rsp, encoding);             }             catch (Exception ex)             {                 result = string.Format("Request exception:{0}, please try again later.", ex.Message);             }             return result;         }          /// <summary>         /// 执行HTTP GET请求。         /// </summary>         /// <param name="url">请求地址</param>         /// <param name="parameters">请求参数</param>         /// <returns>HTTP响应</returns>         static public string DoGet(string url, IDictionary<string, string> parameters)         {             string result = string.Empty;             try             {                 if (parameters != null && parameters.Count > 0)                 {                     if (url.Contains("?"))                     {                         url = url + "&" + BuildQuery(parameters);                     }                     else                     {                         url = url + "?" + BuildQuery(parameters);                     }                 }                  HttpWebRequest req = GetWebRequest(url, "GET");                 req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";                  HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();                 Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);                 result = GetResponseAsString(rsp, encoding);             }             catch (Exception ex)             {                 result = string.Format("Request exception:{0}, please try again later.", ex.Message);             }             return result;         }          static 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 = _timeout;             return req;         }          /// <summary>         /// 把响应流转换为文本。         /// </summary>         /// <param name="rsp">响应流对象</param>         /// <param name="encoding">编码方式</param>         /// <returns>响应文本</returns>         static 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 != '\0')                     {                         result.Append(c);                     }                 }             }             finally             {                 // 释放资源                 if (reader != null) reader.Close();                 if (stream != null) stream.Close();                 if (rsp != null) rsp.Close();             }              return result.ToString();         }          /// <summary>         /// 组装普通文本请求参数用于post请求         /// </summary>         /// <param name="parameters">Key-Value形式请求参数字典</param>         /// <returns>URL编码后的请求数据</returns>         static public string BuildQuery(IDictionary<string, string> parameters)         {             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("=");                     postData.Append(Uri.EscapeDataString(value));                     hasParam = true;                 }             }              return postData.ToString();         }         #endregion
View Code

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!