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
查看全文
相关阅读:
洗礼灵魂,修炼python(20)--自定义函数(1)—基础概念
洗礼灵魂,修炼python(19)--文件I/O操作,linecache,fileinput模块
洗礼灵魂,修炼python(18)--温故加知新
洗礼灵魂,修炼python(17)--跨平台操作三剑客—os,os.path.sys模块
洗礼灵魂,修炼python(16)--列表进阶话题—>上节作业讲解+copy模块,浅拷贝,深拷贝
洗礼灵魂,修炼python(15)--列表进阶话题—>列表解析/列表生成器
洗礼灵魂,修炼python(14)--模块decimal, fractions,operator,collections以及精度介绍
洗礼灵魂,修炼python(13)--模块random,math,pickle
748. Shortest Completing Word
542. 01 Matrix
原文地址:https://www.cnblogs.com/anjou/p/1206832.html
最新文章
内表内容的新添加方法(7.5部分新语法练习)
选择屏幕部分应用
TEXT_CONVERT_XLS_TO_SAP 错误排查
PERFORM参数传递
古老的txt下传和txt上载
SAP PI开发手册-ERP发布服务供外围系统调用(RFC类型)
SAP PI开发手册-ERP发布服务供外部系统调用(sproxy代理类)
SAP PI接口(RFC类型)在函数字段修改或增加后,出现字段映射错误问题
SAP-简单的OALV演示练习
Others-工具箱
热门文章
ABAP-邮件发送
ABAP-JSON数据格式互转
ABAP-数据引用
ABAP-计算器-动态表达式
ABAP-定时-异步
ABAP-container拆分
ABAP-语法检查
ABAP-折叠窗口
洗礼灵魂,修炼python(22)--自定义函数(3)—函数作用域,闭包
洗礼灵魂,修炼python(21)--自定义函数(2)—函数文档,doctest模块,形参,实参,默认参数,关键字参数,收集参数,位置参数
Copyright © 2011-2022 走看看