zoukankan
html css js c++ java
WebClient 保持 Session 和 Cookie
有些朋友说 WebClient 不能保持 Session 和 Cookie,只有 HttpWebRequest 才能保持 Session。实际上我们只要重写 WebClient 的 GetWebRequest 方法就可以使 WebClient 保持 Session 和 Cookie。
下面是
HttpClient 类, 它继承自 WebClient,并重写了
GetWebRequest 方法。关键是要定义一个 Cookie 容器(红色代码部分):
/**/
///
<summary>
///
支持 Session 和 Cookie 的 WebClient。
///
</summary>
public
class
HttpClient : WebClient
{
//
Cookie 容器
private
CookieContainer
cookieContainer
;
/**/
///
<summary>
///
创建一个新的 WebClient 实例。
///
</summary>
public
HttpClient()
{
this
.
cookieContainer
=
new
CookieContainer();
}
/**/
///
<summary>
///
创建一个新的 WebClient 实例。
///
</summary>
///
<param name="cookie">
Cookie 容器
</param>
public
HttpClient(CookieContainer cookies)
{
this
.
cookieContainer
=
cookies;
}
/**/
///
<summary>
///
Cookie 容器
///
</summary>
public
CookieContainer Cookies
{
get
{
return
this
.
cookieContainer
; }
set
{
this
.
cookieContainer
=
value; }
}
/**/
///
<summary>
///
返回带有 Cookie 的 HttpWebRequest。
///
</summary>
///
<param name="address"></param>
///
<returns></returns>
protected
override
WebRequest GetWebRequest(Uri address)
{
WebRequest request
=
base
.GetWebRequest(address);
if
(request
is
HttpWebRequest)
{
HttpWebRequest httpRequest
=
request
as
HttpWebRequest;
httpRequest.CookieContainer = cookieContainer;
}
return
request;
}
封装了PostData, GetSrc 和 GetFile 方法
#region
封装了PostData, GetSrc 和 GetFile 方法
/**/
///
<summary>
///
向指定的 URL POST 数据,并返回页面
///
</summary>
///
<param name="uriString">
POST URL
</param>
///
<param name="postString">
POST 的 数据
</param>
///
<param name="postStringEncoding">
POST 数据的 CharSet
</param>
///
<param name="dataEncoding">
页面的 CharSet
</param>
///
<returns>
页面的源文件
</returns>
public
string
PostData(
string
uriString,
string
postString,
string
postStringEncoding,
string
dataEncoding,
out
string
msg)
{
try
{
//
将 Post 字符串转换成字节数组
byte
[] postData
=
Encoding.GetEncoding(postStringEncoding).GetBytes(postString);
this
.Headers.Add(
"
Content-Type
"
,
"
application/x-www-form-urlencoded
"
);
//
上传数据,返回页面的字节数组
byte
[] responseData
=
this
.UploadData(uriString,
"
POST
"
, postData);
//
将返回的将字节数组转换成字符串(HTML);
string
srcString
=
Encoding.GetEncoding(dataEncoding).GetString(responseData);
srcString
=
srcString.Replace(
"
\t
"
,
""
);
srcString
=
srcString.Replace(
"
\r
"
,
""
);
srcString
=
srcString.Replace(
"
\n
"
,
""
);
msg
=
string
.Empty;
return
srcString;
}
catch
(WebException we)
{
msg
=
we.Message;
return
string
.Empty;
}
}
/**/
///
<summary>
///
获得指定 URL 的源文件
///
</summary>
///
<param name="uriString">
页面 URL
</param>
///
<param name="dataEncoding">
页面的 CharSet
</param>
///
<returns>
页面的源文件
</returns>
public
string
GetSrc(
string
uriString,
string
dataEncoding,
out
string
msg)
{
try
{
//
返回页面的字节数组
byte
[] responseData
=
this
.DownloadData(uriString);
//
将返回的将字节数组转换成字符串(HTML);
string
srcString
=
Encoding.GetEncoding(dataEncoding).GetString(responseData);
srcString
=
srcString.Replace(
"
\t
"
,
""
);
srcString
=
srcString.Replace(
"
\r
"
,
""
);
srcString
=
srcString.Replace(
"
\n
"
,
""
);
msg
=
string
.Empty;
return
srcString;
}
catch
(WebException we)
{
msg
=
we.Message;
return
string
.Empty;
}
}
/**/
///
<summary>
///
从指定的 URL 下载文件到本地
///
</summary>
///
<param name="uriString">
文件 URL
</param>
///
<param name="fileName">
本地文件的完成路径
</param>
///
<returns></returns>
public
bool
GetFile(
string
urlString,
string
fileName,
out
string
msg)
{
try
{
this
.DownloadFile(urlString, fileName);
msg
=
string
.Empty;
return
true
;
}
catch
(WebException we)
{
msg
=
we.Message;
return
false
;
}
}
#endregion
}
相关文章:
使用WebClient自动填写并提交ASP.NET页面表单
使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
查看全文
相关阅读:
MyBatis动态SQL语句
MyBatis分页
理解 Linux 的处理器负载均值
Linux命令之du
Linux命令之df
Linux命令之lsof
maven打包加时间戳
多线程学习-ListenableFuture使用介绍以及示例
Host is not allowed to connect to this MySQL server解决方法
Dapper,大规模分布式系统的跟踪系统
原文地址:https://www.cnblogs.com/anjou/p/1206832.html
最新文章
JUnit4测试方法异常抛出实例
JUnit4 基本用法实例
在命令行中运行JUnit测试
JUnit规则
创建参数化测试
创建套件测试
使用@Ignore注解
使用Eclipse的JUnit实例
JUnit断言
JUnit注解
热门文章
Eclipse JUnit简单示例
JUnit介绍,JUnit是什么?
JUnit教程
MyBatis打印输出SQL语句
MyBatis SqlSessionDaoSupport实例
MyBatis choose(when, otherwise)标签
Mybatis trim标签
Mybatis set标签
MyBatis where标签语句
mybaits if标签语句
Copyright © 2011-2022 走看看