网络请求工具类,大幅代码借鉴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 != '\0')
{
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();
}
}
}

  

最新文章

  1. android绘制圆形图片的两种方式
  2. jQuery原生框架-----------------事件
  3. centos-系统语言检查设置安装
  4. iOS中使用RSA对数据进行加密解密
  5. PostgreSQL Replication之第九章 与pgpool一起工作(7)
  6. codeigniter db操作方法
  7. Windows使用virtualenv搭建flask开发环境
  8. kill,killall,top,free,vmstat,iostat,watch命令
  9. 2015第23周四HTML特殊字符显示问题
  10. OC——封装(初级与高级)
  11. 从一句SQL得出的启示
  12. 【游戏】2048及各种变种大集合汇总【更新ing~新版Floppy2048 - 恒星聚变版 - 恶搞改数据】
  13. 【Hook技术】实现从&quot;任务管理器&quot;中保护进程不被关闭 + 附带源码 + 进程保护知识扩展
  14. 设置ZooKeeper服务器地址列表源码解析及扩展
  15. 开箱即用的VScode C++环境
  16. Oracle 相关知识
  17. PHP无限极分类原理
  18. 12.SolrCloud原理
  19. Storm常用操作命令及WordCount
  20. php tools 破解

热门文章

  1. 启用 Open vSwitch - 每天5分钟玩转 OpenStack(127)
  2. MAC下 mysql不能插入中文和中文乱码的问题总结
  3. pdo的使用
  4. .NET中AOP方便之神SheepAspect
  5. 微信小程序前端源码逻辑和工作流
  6. FullCalendar应用——整合农历节气和节日
  7. C#各种同步方法 lock, Monitor,Mutex, Semaphore, Interlocked, ReaderWriterLock,AutoResetEvent, ManualResetEvent
  8. python之最强王者(9)——函数
  9. Android—Service与Activity的交互
  10. Linux 利用Google Authenticator实现ssh登录双因素认证