C# HttpWebRequest HttpHelper 类
yuyutoo 2024-10-11 23:57 3 浏览 0 评论
HttpHelper老早的一个类,使用中有些地方还需要调整,整体大概可用。
public class HttpHelper<T> where T : class //限制转换T为一个类
{
/// <summary>
/// 判断是否是一个正确格式的URL
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static bool IsUrl(string url)
{
url = url.Trim().ToLower();
if (url.StartsWith("http://") || url.StartsWith("https://"))
{
return true;
}
return false;
}
/// <summary>
/// 用Get取得页面信息
/// </summary>
/// <param name="url"></param>
/// <param name="requestConfig"></param>
/// <param name="proxyConfig"></param>
/// <returns></returns>
public static string HttpGetString(string url, RequestConfig requestConfig = null, WebProxyConfig proxyConfig = null)
{
string ret = "";
try
{
if (requestConfig == null)
{
requestConfig = new RequestConfig();
}
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "Get";
request.UserAgent = requestConfig.UserAgent;
request.Accept = requestConfig.Accept;
request.ContentType = requestConfig.ContentType;
request.Timeout = requestConfig.Timeout;
request.AllowAutoRedirect = requestConfig.AllowAutoRedirect;
request.KeepAlive = requestConfig.KeepAlive;
request.Headers = requestConfig.Headers;
if (proxyConfig != null)
{
WebProxy wp = new WebProxy(proxyConfig.address, true);
wp.Credentials = new NetworkCredential(proxyConfig.user, proxyConfig.password);
request.Proxy = wp;
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader sr = new StreamReader(stream, requestConfig.ContentEncoding);
ret = sr.ReadToEnd();
sr.Close();
stream.Close();
response.Close();
return ret;
}
catch (Exception ex)
{
//输出日志
}
return ret;
}
/// <summary>
/// Post表单信息
/// </summary>
/// <param name="url"></param>
/// <param name="postData"></param>
/// <param name="requestConfig"></param>
/// <param name="proxyConfig"></param>
/// <returns></returns>
public static string HttpPostString(string url, string postData, RequestConfig requestConfig = null, WebProxyConfig proxyConfig = null)
{
string ret = "";
try
{
if (requestConfig == null)
{
requestConfig = new RequestConfig();
}
byte[] data = requestConfig.ContentEncoding.GetBytes(postData);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
CookieContainer cookie = new CookieContainer();
request.CookieContainer = cookie;
request.AllowAutoRedirect = requestConfig.AllowAutoRedirect;
request.UserAgent = requestConfig.UserAgent;
request.Method = "Post";
request.Accept = requestConfig.Accept;
request.ContentType = requestConfig.ContentType;
request.Timeout = requestConfig.Timeout;
request.ContentLength = data.Length;
if (proxyConfig != null)
{
WebProxy wp = new WebProxy(proxyConfig.address, true);
wp.Credentials = new NetworkCredential(proxyConfig.user, proxyConfig.password);
request.Proxy = wp;
}
Stream outStream = request.GetRequestStream();
outStream.Write(data, 0, data.Length);
outStream.Close();
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream inStream = response.GetResponseStream();
StreamReader sr = new StreamReader(inStream, requestConfig.ContentEncoding);
ret = sr.ReadToEnd();
sr.Close();
inStream.Close();
response.Close();
return ret;
}
catch (Exception ex)
{
//输出日志
}
return ret;
}
/// <summary>
/// 下载一个文件
/// </summary>
/// <param name="url"></param>
/// <param name="outFile"></param>
/// <param name="requestConfig"></param>
/// <param name="proxyConfig"></param>
/// <returns></returns>
public static bool DownloadFile(string url, string outFile, RequestConfig requestConfig = null, WebProxyConfig proxyConfig = null)
{
bool ret = false;
FileStream fs = null;
try
{
if (requestConfig == null)
{
requestConfig = new RequestConfig();
}
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "Get";
request.ContentType = requestConfig.ContentType;
request.Accept = requestConfig.Accept;
request.UserAgent = requestConfig.UserAgent;
if (proxyConfig != null)
{
WebProxy wp = new WebProxy(proxyConfig.address, true);
wp.Credentials = new NetworkCredential(proxyConfig.user, proxyConfig.password);
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream stream = response.GetResponseStream();
fs = new FileStream(outFile, FileMode.Create);
int bufferSize = 1024;
byte[] data = new byte[bufferSize];
int length = 0;
while ((length = stream.Read(data, 0, bufferSize)) > 0)
{
fs.Write(data, 0, length);
}
fs.Close();
stream.Close();
response.Close();
ret = true;
}
catch (Exception ex)
{
//输出日志
}
finally
{
if (fs != null)
{
fs.Close();
}
}
return ret;
}
/// <summary>
/// 用Get取得一个Json数据,将其转换为类
/// </summary>
/// <param name="url"></param>
/// <param name="requestConfig"></param>
/// <param name="proxyConfig"></param>
/// <returns></returns>
public static T HttpGetObject(string url, RequestConfig requestConfig = null, WebProxyConfig proxyConfig = null)
{
T item;
try
{
if (requestConfig == null)
{
requestConfig = new RequestConfig();
}
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "Get";
request.UserAgent = requestConfig.UserAgent;
request.Accept = requestConfig.Accept;
request.ContentType = requestConfig.ContentType;
request.Timeout = requestConfig.Timeout;
request.AllowAutoRedirect = requestConfig.AllowAutoRedirect;
request.KeepAlive = requestConfig.KeepAlive;
if (proxyConfig != null)
{
WebProxy wp = new WebProxy(proxyConfig.address, true);
wp.Credentials = new NetworkCredential(proxyConfig.user, proxyConfig.password);
request.Proxy = wp;
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream stream = response.GetResponseStream();
StreamReader sr = new StreamReader(stream, requestConfig.ContentEncoding);
string content = sr.ReadToEnd();
sr.Close();
stream.Close();
response.Close();
item = JsonConvert.DeserializeObject<T>(content);
return item;
}
catch (Exception ex)
{
//输出日志
}
return null;
}
/// <summary>
/// Post取得JSON转换为列表对像
/// </summary>
/// <param name="url"></param>
/// <param name="postData"></param>
/// <param name="contentType"></param>
/// <param name="timeout"></param>
/// <param name="config"></param>
/// <returns></returns>
public static T HttpPostObject(string url, string postData, RequestConfig requestConfig = null
, WebProxyConfig proxyConfig = null)
{
T item;
Stream outstream = null;
Stream instream = null;
StreamReader sr = null;
HttpWebResponse response = null;
HttpWebRequest request = null;
Encoding encoding = Encoding.UTF8;
byte[] data = encoding.GetBytes(postData);
//准备请求...
try
{
if (requestConfig == null)
{
requestConfig = new RequestConfig();
}
//设置参数
request = WebRequest.Create(url) as HttpWebRequest;
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = requestConfig.AllowAutoRedirect;
request.UserAgent = requestConfig.UserAgent;
request.Method = "POST";
request.Accept = requestConfig.Accept;
request.ContentType = requestConfig.ContentType;
request.Timeout = requestConfig.Timeout;
request.KeepAlive = requestConfig.KeepAlive;
request.ContentLength = data.Length;
if (proxyConfig != null)
{
WebProxy wp = new WebProxy(proxyConfig.address, true);
wp.Credentials = new NetworkCredential(proxyConfig.user, proxyConfig.password);
request.Proxy = wp;
}
outstream = request.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Close();
//发送请求并获取相应回应数据
response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
instream = response.GetResponseStream();
sr = new StreamReader(instream, encoding);
//返回数据
string content = sr.ReadToEnd();
item = JsonConvert.DeserializeObject<T>(content);
return item;
}
catch (Exception ex)
{
return null;
}
}
}
/// <summary>
/// Web代理配制信息
/// </summary>
public class WebProxyConfig
{
public string address { get; set; }
public string user { get; set; }
public string password { get; set; }
public WebProxyConfig()
{
}
public WebProxyConfig(string address, string user, string password)
{
this.address = address;
this.user = user;
this.password = password;
}
}
public class RequestConfig
{
private bool _AllowAutoRedirect = true;
/// <summary>
/// 自动跳转
/// </summary>
public bool AllowAutoRedirect
{
get
{
return _AllowAutoRedirect;
}
set
{
AllowAutoRedirect = value;
}
}
private string _UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36";
/// <summary>
/// 指定浏览器
/// </summary>
public string UserAgent
{
get
{
return _UserAgent;
}
set
{
_UserAgent = value;
}
}
private string _Accept = "*/*";
/// <summary>
/// 资源的媒体类型
/// </summary>
public string Accept
{
get
{
return _Accept;
}
set
{
_Accept = value;
}
}
private int _Timeout = 10 * 1000;
/// <summary>
/// 指定超时
/// </summary>
public int Timeout
{
get
{
return _Timeout;
}
set
{
_Timeout = value;
}
}
private bool _KeepAlive = true;
/// <summary>
/// 资源建立持久性连接
/// </summary>
public bool KeepAlive
{
get
{
return _KeepAlive;
}
set
{
_KeepAlive = value;
}
}
private string _ContentType = "application/x-www-form-urlencoded";
/// <summary>
/// 资源的媒体类型
/// </summary>
public string ContentType
{
get
{
return _ContentType;
}
set
{
_ContentType = value;
}
}
/// <summary>
/// 内容编码
/// </summary>
public Encoding _ContentEncoding = System.Text.Encoding.UTF8;
public Encoding ContentEncoding
{
get
{
return _ContentEncoding;
}
set
{
_ContentEncoding = value;
}
}
public WebHeaderCollection _Headers = new WebHeaderCollection();
public WebHeaderCollection Headers
{
get
{
return _Headers;
}
set
{
_Headers = value;
}
}
}
HttpWebResponse请求状态代码标识
成员名称 | 说明 |
Continue | 等效于 HTTP 状态 100。Continue 指示客户端可能继续其请求。 |
SwitchingProtocols | 等效于 HTTP 状态 101。SwitchingProtocols 指示正在更改协议版本或协议。 |
OK | 等效于 HTTP 状态 200。OK 指示请求成功,且请求的信息包含在响应中。这是最常接收的状态代码。 |
Created | 等效于 HTTP 状态 201。Created 指示请求导致在响应被发送前创建新资源。 |
Accepted | 等效于 HTTP 状态 202。Accepted 指示请求已被接受做进一步处理。 |
NonAuthoritativeInformation | 等效于 HTTP 状态 203。NonAuthoritativeInformation 指示返回的元信息来自缓存副本而不是原始服务器,因此可能不正确。 |
NoContent | 等效于 HTTP 状态 204。NoContent 指示已成功处理请求并且响应已被设定为无内容。 |
ResetContent | 等效于 HTTP 状态 205。ResetContent 指示客户端应重置(或重新加载)当前资源。 |
PartialContent | 等效于 HTTP 状态 206。PartialContent 指示响应是包括字节范围的 GET 请求所请求的部分响应。 |
MultipleChoices | 等效于 HTTP 状态 300。MultipleChoices 指示请求的信息有多种表示形式。默认*作是将此状态视为重定向,并遵循与此相应关联的 Location 头的内容。 |
Ambiguous | 等效于 HTTP 状态 300。Ambiguous 指示请求的信息有多种表示形式。默认*作是将此状态视为重定向,并遵循与此相应关联的 Location 头的内容。 |
MovedPermanently | 等效于 HTTP 状态 301。MovedPermanently 指示请求的信息已移到 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。 |
Moved | 等效于 HTTP 状态 301。Moved 指示请求的信息已移到 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。 |
Found | 等效于 HTTP 状态 302。Found 指示请求的信息位于 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。 |
Redirect | 等效于 HTTP 状态 302。Redirect 指示请求的信息位于 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。 |
SeeOther | 等效于 HTTP 状态 303。作为 POST 的结果,SeeOther 将客户端自动重定向到 Location 头中指定的 URI。用 GET 生成对 Location 头所指定的资源的请求。 |
RedirectMethod | 等效于 HTTP 状态 303。作为 POST 的结果,RedirectMethod 将客户端自动重定向到 Location 头中指定的 URI。用 GET 生成对 Location 头所指定的资源的请求。 |
NotModified | 等效于 HTTP 状态 304。NotModified 指示客户端的缓存副本是最新的。未传输此资源的内容。 |
UseProxy | 等效于 HTTP 状态 305。UseProxy 指示请求应使用位于 Location 头中指定的 URI 的代理服务器。 |
Unused | 等效于 HTTP 状态 306。Unused 是未完全指定的 HTTP/1.1 规范的建议扩展。 |
TemporaryRedirect | 等效于 HTTP 状态 307。TemporaryRedirect 指示请求信息位于 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求还将使用 POST 方法。 |
RedirectKeepVerb | 等效于 HTTP 状态 307。RedirectKeepVerb 指示请求信息位于 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求还将使用 POST 方法。 |
BadRequest | 等效于 HTTP 状态 400。BadRequest 指示服务器未能识别请求。如果没有其他适用的错误,或者如果不知道准确的错误或错误没有自己的错误代码,则发送 BadRequest。 |
Unauthorized | 等效于 HTTP 状态 401。Unauthorized 指示请求的资源要求身份验证。WWW-Authenticate 头包含如何执行身份验证的详细信息。 |
PaymentRequired | 等效于 HTTP 状态 402。保留 PaymentRequired 以供将来使用。 |
Forbidden | 等效于 HTTP 状态 403。Forbidden 指示服务器拒绝满足请求。 |
NotFound | 等效于 HTTP 状态 404。NotFound 指示请求的资源不在服务器上。 |
MethodNotAllowed | 等效于 HTTP 状态 405。MethodNotAllowed 指示请求的资源上不允许请求方法(POST 或 GET)。 |
NotAcceptable | 等效于 HTTP 状态 406。NotAcceptable 指示客户端已用 Accept 头指示将不接受资源的任何可用表示形式。 |
ProxyAuthenticationRequired | 等效于 HTTP 状态 407。ProxyAuthenticationRequired 指示请求的代理要求身份验证。Proxy-authenticate 头包含如何执行身份验证的详细信息。 |
RequestTimeout | 等效于 HTTP 状态 408。RequestTimeout 指示客户端没有在服务器期望请求的时间内发送请求。 |
Conflict | 等效于 HTTP 状态 409。Conflict 指示由于服务器上的冲突而未能执行请求。 |
Gone | 等效于 HTTP 状态 410。Gone 指示请求的资源不再可用。 |
LengthRequired | 等效于 HTTP 状态 411。LengthRequired 指示缺少必需的 Content-length 头。 |
PreconditionFailed | 等效于 HTTP 状态 412。PreconditionFailed 指示为此请求设置的条件失败,且无法执行此请求。条件是用条件请求标头(如 If-Match、If-None-Match 或 If-Unmodified-Since)设置的。 |
RequestEntityTooLarge | 等效于 HTTP 状态 413。RequestEntityTooLarge 指示请求太大,服务器无法处理。 |
RequestUriTooLong | 等效于 HTTP 状态 414。RequestUriTooLong 指示 URI 太长。 |
UnsupportedMediaType | 等效于 HTTP 状态 415。UnsupportedMediaType 指示请求是不支持的类型。 |
RequestedRangeNotSatisfiable | 等效于 HTTP 状态 416。RequestedRangeNotSatisfiable 指示无法返回从资源请求的数据范围,因为范围的开头在资源的开头之前,或因为范围的结尾在资源的结尾之后。 |
ExpectationFailed | 等效于 HTTP 状态 417。ExpectationFailed 指示服务器未能符合 Expect 头中给定的预期值。 |
InternalServerError | 等效于 HTTP 状态 500。InternalServerError 指示服务器上发生了一般错误。 |
NotImplemented | 等效于 HTTP 状态 501。NotImplemented 指示服务器不支持请求的函数。 |
BadGateway | 等效于 HTTP 状态 502。BadGateway 指示中间代理服务器从另一代理或原始服务器接收到错误响应。 |
ServiceUnavailable | 等效于 HTTP 状态 503。ServiceUnavailable 指示服务器暂时不可用,通常是由于过多加载或维护。 |
GatewayTimeout | 等效于 HTTP 状态 504。GatewayTimeout 指示中间代理服务器在等待来自另一个代理或原始服务器的响应时已超时。 |
HttpVersionNotSupported | 等效于 HTTP 状态 505。HttpVersionNotSupported 指示服务器不支持请求的 HTTP 版本。 |
相关推荐
- 史上最全的浏览器兼容性问题和解决方案
-
微信ID:WEB_wysj(点击关注)◎◎◎◎◎◎◎◎◎一┳═┻︻▄(页底留言开放,欢迎来吐槽)●●●...
-
- 平面设计基础知识_平面设计基础知识实验收获与总结
-
CSS构造颜色,背景与图像1.使用span更好的控制文本中局部区域的文本:文本;2.使用display属性提供区块转变:display:inline(是内联的...
-
2025-02-21 16:01 yuyutoo
- 写作排版简单三步就行-工具篇_作文排版模板
-
和我们工作中日常word排版内部交流不同,这篇教程介绍的写作排版主要是用于“微信公众号、头条号”网络展示。写作展现的是我的思考,排版是让写作在网格上更好地展现。在写作上花费时间是有累积复利优势的,在排...
- 写一个2048的游戏_2048小游戏功能实现
-
1.创建HTML文件1.打开一个文本编辑器,例如Notepad++、SublimeText、VisualStudioCode等。2.将以下HTML代码复制并粘贴到文本编辑器中:html...
- 今天你穿“短袖”了吗?青岛最高23℃!接下来几天气温更刺激……
-
最近的天气暖和得让很多小伙伴们喊“热”!!! 昨天的气温到底升得有多高呢?你家有没有榜上有名?...
- CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式
-
之前也有写过CSS优惠券样式《CSS3径向渐变实现优惠券波浪造型》,这次再来温习一遍,并且将更为详细的讲解,从布局到具体样式说明,最后定义CSS变量,自定义主题颜色。布局...
- 你的自我界限够强大吗?_你的自我界限够强大吗英文
-
我的结果:A、该设立新的界限...
- 行内元素与块级元素,以及区别_行内元素和块级元素有什么区别?
-
行内元素与块级元素首先,CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,分别为块级(block)、行内(inline)。块级元素:(以下列举比较常...
-
- 让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华
-
去年的两会期间,习近平总书记在参加人大会议四川代表团审议时,对治蜀兴川提出了明确要求,指明了前行方向,并带来了“祝四川人民的生活越来越安逸”的美好祝福。又是一年...
-
2025-02-21 16:00 yuyutoo
- 今年国家综合性消防救援队伍计划招录消防员15000名
-
记者24日从应急管理部获悉,国家综合性消防救援队伍2023年消防员招录工作已正式启动。今年共计划招录消防员15000名,其中高校应届毕业生5000名、退役士兵5000名、社会青年5000名。本次招录的...
- 一起盘点最新 Chrome v133 的5大主流特性 ?
-
1.CSS的高级attr()方法CSSattr()函数是CSSLevel5中用于检索DOM元素的属性值并将其用于CSS属性值,类似于var()函数替换自定义属性值的方式。...
- 竞走团体世锦赛5月太仓举行 世界冠军杨家玉担任形象大使
-
style="text-align:center;"data-mce-style="text-align:...
- 学物理能做什么?_学物理能做什么 卢昌海
-
作者:曹则贤中国科学院物理研究所原标题:《物理学:ASourceofPowerforMan》在2006年中央电视台《对话》栏目的某期节目中,主持人问过我一个的问题:“学物理的人,如果日后不...
-
- 你不知道的关于这只眯眼兔的6个小秘密
-
在你们忙着给熊本君做表情包的时候,要知道,最先在网络上引起轰动的可是这只脸上只有两条缝的兔子——兔斯基。今年,它更是迎来了自己的10岁生日。①关于德艺双馨“老艺...
-
2025-02-21 16:00 yuyutoo
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)