HttpWebRequest,HttpWebResponse 使用
目的:工作中已经两次使用了,特此记录一下,并写好注释
/// <summary>
/// HttpWebRequest的基本配置
/// </summary>
public class HttpConfig
{
/// <summary>
/// 协议:http/https
/// </summary>
public string protocol
{
set;
get;
} /// <summary>
/// 发送端发送的数据格式
/// </summary>
public string contentType
{
set;
get;
} /// <summary>
/// 客户端希望接受的数据类型
/// </summary>
public string accept
{
set;
get;
} /// <summary>
/// 标识请求者的一些信息,如浏览器类型和版本、操作系统,使用语言等信息(IE,Firefox以“Mozilla/....”开头)
/// </summary>
public string userAgent
{
set;
get;
} /// <summary>
/// 超时时间
/// </summary>
public int timeOut
{
set;
get;
} /// <summary>
/// 请求body的编码类型:utf-8/gbk2312/gbk
/// </summary>
public string encoding
{
set;
get;
} /// <summary>
/// 请求方式:GET/POST
/// </summary>
public string method
{
set;
get;
} /// <summary>
/// 是否保持持续连接。默认为true
/// </summary>
public bool keepAlive
{
set;
get;
} /// <summary>
/// cookie集合
/// </summary>
public CookieContainer cc = null; /// <summary>
/// http header集合
/// </summary>
public WebHeaderCollection whc = null; public HttpConfig()
{
protocol = "http";
contentType = "application/xml;charset=utf-8";
accept = "application/xml";
userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
timeOut = 15;
encoding = "utf-8";
method = "POST";
keepAlive = false;
} public HttpConfig(Dictionary<string, string> dctCookieKeyValus, string Domain, Dictionary<string, string> dctHeaderKeyValus)
: this()
{
GetCookieContainer(dctCookieKeyValus, Domain);
GetWebHeaderCollection(dctHeaderKeyValus);
} /// <summary>
/// 设置cookies
/// </summary>
/// <param name="dctKeyValus"></param>
/// <param name="Domain"></param>
public void GetCookieContainer(Dictionary<string, string> dctKeyValus, string Domain)
{
if (dctKeyValus.Count > 0)
{
cc = new CookieContainer();
foreach (string key in dctKeyValus.Keys)
{
Cookie cookie = new Cookie(key, dctKeyValus[key]);
cookie.Domain = "";
cc.Add(cookie);
}
}
} /// <summary>
/// 设置httpheaders
/// </summary>
/// <param name="dctKeyValus"></param>
public void GetWebHeaderCollection(Dictionary<string, string> dctKeyValus)
{
if (dctKeyValus.Count > 0)
{
whc = new WebHeaderCollection();
foreach (string key in dctKeyValus.Keys)
{
whc.Add(string.Format("{0}:{1}", key, dctKeyValus[key]));
}
}
}
} public class HttpRequestAndResponse
{
HttpConfig httpConfig = null; public HttpRequestAndResponse(HttpConfig httpconfig)
{
httpConfig = httpconfig;
} /// <summary>
/// 调过https验证
/// </summary>
private static bool CheckValidationResult(object sender, X509Certificate certificate,
X509Chain chain, SslPolicyErrors errors)
{
return true;
} public string RequestAndResponse(string url, string requestXML, ref string errString)
{
string response = "";
HttpWebRequest req = null;
HttpWebResponse res = null;
try
{
ServicePointManager.ServerCertificateValidationCallback =
new RemoteCertificateValidationCallback(CheckValidationResult); /*最大并接数*************************************************************/
ServicePointManager.DefaultConnectionLimit = 200;//最大并发连接数
//如果写在配置文件里 app.config
// <system.net>
// <connectionManagement>
// <!--表示把对任何域名的请求最大http连接数都设置为200-->
// <add address = "*" maxconnection = "200" />
// </connectionManagement>
//</system.net> req = WebRequest.Create(url) as HttpWebRequest; /*HttpWebRequest的基本属性设置*************************************************************/
req.ProtocolVersion = HttpVersion.Version10;
req.UserAgent = httpConfig.userAgent;
req.KeepAlive = httpConfig.keepAlive;
req.Timeout = 1000 * httpConfig.timeOut;
req.Method = httpConfig.method;
req.Accept = httpConfig.accept;
req.ContentType = httpConfig.contentType; /*写入http头部信息*************************************************************************/
if (httpConfig.whc != null)
req.Headers = httpConfig.whc; /*cookie拼接*************************************************************/
if (httpConfig.cc != null)
req.CookieContainer = httpConfig.cc; /*写入requestXML***************************************************************************/
if (!string.IsNullOrEmpty(requestXML))
{
byte[] bytes = System.Text.Encoding.GetEncoding(httpConfig.encoding).GetBytes(requestXML);
if (bytes.Length > 0)
{
req.ContentLength = bytes.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(bytes, 0, bytes.Length);
reqStream.Close();
}
}
} /*HttpWebResponse获取服务器数据**************************************************************/
res = req.GetResponse() as HttpWebResponse;
using (Stream resStream = res.GetResponseStream())
{
using (StreamReader resStreamReader = new StreamReader(resStream, Encoding.GetEncoding(httpConfig.encoding)))
{
response = resStreamReader.ReadToEnd();
}
}
}
catch (WebException e)
{
HttpWebResponse exceptionRes = e.Response as HttpWebResponse;
errString = "#Status-line\n";
string format = "protocolVersion:{0}\tstatusCode:{1}\tstatusDescription:{2}\n";
errString += string.Format(format, exceptionRes.ProtocolVersion, Convert.ToInt32(exceptionRes.StatusCode), exceptionRes.StatusDescription); errString += "#Header\n";
format = "num[{0}]:({1}:{2})\n";
for (int i = 0; i < exceptionRes.Headers.Count; i++)
{
errString += string.Format(format, i, exceptionRes.Headers.Keys[i], exceptionRes.Headers[i]);
} errString += "#Body\n";
using (Stream resStream = exceptionRes.GetResponseStream())
{
using (StreamReader resStreamReader = new StreamReader(resStream, Encoding.GetEncoding(httpConfig.encoding)))
{
errString += resStreamReader.ReadToEnd() + "\n";
resStreamReader.Close();
resStream.Close();
}
}
errString += "#end\n"; exceptionRes.Close();
}
catch (Exception e)
{
errString = e.ToString();
}
finally
{
if (res!= null)
{
res.Close();
res = null;
} if (req != null)
{
req.Abort();
req = null;
}
} return response;
}
}
HttpWebRequest,HttpWebResponse 使用的更多相关文章
- HttpWebRequest,HttpWebResponse的用法和用途
1.用途:HettpWebRequest,HettpWebResponse用途和webServers的作用差不多,都是得到一个页面传过来的值.HttpWebRequest 2.用法:--------- ...
- C#获取网页内容 (WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
获取网页数据有很多种方式.在这里主要讲述通过WebClient.WebBrowser和HttpWebRequest/HttpWebResponse三种方式获取网页内容. 这里获取的是包括网页的所有信息 ...
- C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
一.通过WebClient获取网页内容 这是一种很简单的获取方式,当然,其它的获取方法也很简单.在这里首先要说明的是,如果为了实际项目的效率考虑,需要考虑在函数中分配一个内存区域.大概写法如下 //M ...
- 【转】C# HttpWebRequest\HttpWebResponse\WebClient发送请求解析json数据
http://blog.csdn.net/kingcruel/article/details/44036871 版权声明:本文为博主原创文章,未经博主允许不得转载. ================= ...
- MSDN中HttpWebRequest/HttpWebResponse用法
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("http://home.cnblogs.com/u/weiweiboqi/ ...
- HttpWebRequest,HttpWebResponse C# 代码调用webservice,参数为xml
先上调用代码 public static string PostMoths(string url, string Json) { System.Net.HttpWebRequest request; ...
- HttpWebRequest 和HttpWebResponse总结
1. 总结 总结2 3. Code using System; using System.Collections.Generic; using System.Linq; using System.Te ...
- C#中HttpWebRequest与HttpWebResponse的使用方法
关键字:C# HttpWebRequest HttpWebResponse HTTP GET POST 请求 这个类是专门为HTTP的GET和POST请求写的,解决了编码,证书,自动带Cookie等问 ...
- 【转】C#中HttpWebRequest的用法详解
本文实例讲述了C#中HttpWebRequest的用法.分享给大家供大家参考.具体如下: HttpWebRequest类主要利用HTTP 协议和服务器交互,通常是通过 GET 和 POST 两种方式来 ...
随机推荐
- 在winform下实现左右布局多窗口界面的方法(二)
这篇文章主要介绍了在winform下实现左右布局多窗口界面的方法之续篇 的相关资料,需要的朋友可以参考下 在上篇文章在winform下实现左右布局多窗口界面的方法(一)已经实现了左右布局多窗口界面,今 ...
- 洛谷P4721 【模板】分治 FFT(分治FFT)
传送门 多项式求逆的解法看这里 我们考虑用分治 假设现在已经求出了$[l,mid]$的答案,要计算他们对$[mid+1,r]$的答案的影响 那么对右边部分的点$f_x$的影响就是$f_x+=\sum_ ...
- java中static的学习
1.static引入: 通常来说,当创建一个类是,就是在描述那个类的对象的外观与行为.除非用new创建那个类的对象,否则实际并未获取任何对象.当执行new来创建对象时,数据存储空间才被分配,七方法才供 ...
- 把python2.6升级到python2.7(同样适用于把python2升级到python3)
在启用https过程中,在生成CSR(证书请求文件)时,报错了,说python2.6已被python团队抛弃了,所以升级python到2.7 话不多说,直接上代码: 步骤1:下载python2.7.1 ...
- hihoCoder#1181(欧拉路径)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回中小Hi和小Ho控制着主角收集了分散在各个木桥上的道具,这些道具其实是一块一块骨牌. 主角继续往前走,面前出现了一 ...
- str.split和re.split中空格的区别
一.str.split和re.split的基本用法 1.str.spli的基本用法 现用下面的文件: 1 maqing:abc123 我们要建立一个用户名和用户密码的匹配关系: with open(& ...
- Spring MVC配置详解(1)
web.xml的配置 <!-- 配置前端控制器 前端控制器(DispatcherServlet)--> <servlet> <servlet-name>spring ...
- [Apache]架设Apache服务器
我自己使用的是Ubuntu的操作系统, 所以我主要是记录的在ubuntu的Apache的安装和简单的配置. Apache服务器的架设: 一.命令行安装 使用下面的指令下载apache2 sudo ap ...
- scrapy xpath 节点关系
父节点 子节点 兄弟节点 先辈节点 后代节点
- C#高级参数out的使用
C#中有三个高级参数,分别是out,ref,params.本文章中先来介绍out参数的使用. out,用于在方法中返回多余值.(可以理解为让一个方法返回不同的类型值) 我们通过例子来理解例子的功能:用 ...