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 两种方式来 ...
随机推荐
- unity 联机调试(android ios)
http://blog.csdn.net/OnafioO/article/details/44903491 (这种没用,只是在手机看到画面而已) 手机安装unityRemote并运行,unity中设置 ...
- DirectX 读书笔记(14) Cube mapping之SkyBox[转]
http://blog.csdn.net/i_dovelemon/article/details/40481681 作者:i_dovelemon 来源:CSDN 日期:2014 / 10 / 26 主 ...
- angular +H5 上传图片 与预览图片
//index.html <form class="form-horizontal"> <div class="panel panel-default& ...
- 第一章计算机网络和因特网-day02
1.互联网中的时延:处理时延.排队时延.传输时延.传播时延. 处理时延:检查分组首部和决定该分组导向何处的时间. 排队时延:分组在链路上等待传输的时延. 传输时延:分组经过路由器与交换机的过程的时延. ...
- C#改变LInqToSQL的引用地址,读取config的数据库字符串
C#改变LInqToSQL的引用地址,读取config的数据库字符串修改Properties 下 Settings.Settings 下 Settings.Designer.cs 下 return ( ...
- lucene 5.2.0学习笔记
package com.bc.cas.manager; import com.bc.cas.dao.BookDao; import com.bc.cas.model.entity.Book; impo ...
- hadoop再次集群搭建(5)-CDH Install
登录 http://node1.com:7180/.用户名和密码都是admin.启动服务命令是 service cloudera-scm-server start 最开始两个页面直接conti ...
- 图片缓存核心类LruCache
该类类似一个缓存池,具体可参考 http://www.fengfly.com/plus/view-214546-2.html
- 详解CSS display:inline-block的应用(转)
详解CSS display:inline-block的应用 阅读目录 基础知识 inline-block的问题 inline-block的应用 总结 本文详细描述了display:inline-b ...
- unity3d MonoDevelop引用外部自定义dll文件报错:are you missing an assembly reference?
在unity3d 编辑器 MonoDevelop 中引用外部自定义dll文件报错:are you missing an assembly reference? 因为unity还停留在.NET Fram ...