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
查看全文
相关阅读:
IOS动态类型isKindOfClass, isMemberOfClass
IOS-sqlite3数据库: create table数据库表及对数据库表的增删改查(create/insert/delete)
TCP/UDP区别
IOS中的NSData和NSFileManager例子微解
IOS TableView的Delegate Methods-tableView didSelectRowAtIndexPath
IOS IPA打包和真机测试
使用autolayout的NSLayoutConstraint类中的constraintWithItem 、constraintsWithVisualFormat这两个类方法来创建视图并可以实现自动布局
自定义圆形进度条
通过cagradientLayer类封装uiimageview动画色度差
通过CAGradientLayer类实现色度差动画
原文地址:https://www.cnblogs.com/anjou/p/1206832.html
最新文章
Linux NFS
Linux bind9配置
Linux awk命令简单操作
Python简单操作笔记
Python 用户输入用户名,进行验证
ssh 公钥私钥认证原理
fedora 20 使用集
is-scalas-actors-similar-to-gos-coroutines
apns issue
nodejs thread
热门文章
what exactly is a nodejs event loop tick?
js module manager
reactjs 不错的文章
js ios
select for update
A monad is just a monoid in the category of endofunctors
CPS
IOS 多行多列加载ImageView
iOS 打包上传发布到App Store上(个人账号)
IOS AppDelegate设置Root页面
Copyright © 2011-2022 走看看