WebRequest保持Session和Cookie
来源:互联网 发布:删除表的定义的sql语句 编辑:程序博客网 时间:2024/04/28 17:06
最近用到了webrequest,查了很多资料都无法保存网站的登录信息
最后自己终于调试成功了一把。
Option Explicit On
Option Strict On
Imports System.Net
Imports System.Web
Imports System.Text
Imports System.IO
Namespace SoilNET.KRL.WebUtility
Public Class LoginRequest
Public Cookies As CookieCollection
Sub New()
End Sub
Public Function Login(ByVal Url As String, ByVal Params As String) As String
Dim strResult As String = getPageByPost(Url, Params)
Return strResult
End Function
Public Function getPageByPost(ByVal url As String, ByVal payload As String, Optional ByVal needEncode As Boolean = False) As String
Dim result As HttpWebResponse
Dim strResult As String =
Try
Dim req As HttpWebRequest
Dim RequestStream As Stream
Dim ReceiveStream As Stream
Dim encode As Encoding
Dim sr As StreamReader
req = CType(WebRequest.Create(url), HttpWebRequest)
req.Method = POST
req.ContentType = applicationx-www-form-urlencoded
req.CookieContainer = New CookieContainer
req.UserAgent = Mozilla4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; .NET CLR 1.0.3705)
If Not Me.Cookies Is Nothing Then
req.CookieContainer.Add(New Uri(url), Me.Cookies)
End If
Dim SomeBytes() As Byte
Dim UrlEncoded As New StringBuilder
Dim reserved() As Char = {ChrW(63), ChrW(61), ChrW(38)}
If payload Nothing Then
If needEncode Then '有些网站encode后反而出现中文乱码所以加上这个开关
Dim i As Integer = 0
Dim j As Integer
While i payload.Length
j = payload.IndexOfAny(reserved, i)
If j = -1 Then
UrlEncoded.Append(HttpUtility.UrlEncode(payload.Substring(i, payload.Length - i)))
Exit While
End If
UrlEncoded.Append(HttpUtility.UrlEncode(payload.Substring(i, j - i)))
UrlEncoded.Append(payload.Substring(j, 1))
i = j + 1
End While
SomeBytes = System.Text.Encoding.ASCII.Default.GetBytes(UrlEncoded.ToString())
Else
SomeBytes = System.Text.Encoding.ASCII.Default.GetBytes(payload)
End If
req.ContentLength = SomeBytes.Length
RequestStream = req.GetRequestStream()
RequestStream.Write(SomeBytes, 0, SomeBytes.Length)
RequestStream.Close()
Else
req.ContentLength = 0
End If
'result.Cookies = New CookieCollection
result = CType(req.GetResponse(), HttpWebResponse)
ReceiveStream = result.GetResponseStream()
encode = System.Text.Encoding.ASCII.Default
sr = New StreamReader(ReceiveStream, encode)
Dim read(256) As Char
Dim count As Integer = sr.Read(read, 0, 256)
Do While count 0
strResult &= New String(read, 0, count)
count = sr.Read(read, 0, 256)
Loop
Me.Cookies = req.CookieContainer.GetCookies(New Uri(url))
Catch Exc As Exception
Debug.Write(Exc.Message)
Finally
If Not result Is Nothing Then
result.Close()
End If
End Try
Return strResult
End Function
Public Function getPageByUrl(ByVal url As String) As String
Dim result As HttpWebResponse
Dim strResult As String =
Try
Dim req As HttpWebRequest
Dim ReceiveStream As Stream
Dim encode As Encoding
Dim sr As StreamReader
req = CType(WebRequest.Create(url), HttpWebRequest)
req.Method = GET
req.CookieContainer = New CookieContainer
req.UserAgent = Mozilla4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; .NET CLR 1.0.3705)
If Not Me.Cookies Is Nothing Then
req.CookieContainer.Add(New Uri(url), Me.Cookies)
End If
result = CType(req.GetResponse(), HttpWebResponse)
ReceiveStream = result.GetResponseStream()
encode = System.Text.Encoding.ASCII.Default
sr = New StreamReader(ReceiveStream, encode)
Dim read(256) As Char
Dim count As Integer = sr.Read(read, 0, 256)
Do While count 0
strResult &= New String(read, 0, count)
count = sr.Read(read, 0, 256)
Loop
Me.Cookies = req.CookieContainer.GetCookies(New Uri(url))
Catch Exc As Exception
Finally
If Not result Is Nothing Then
result.Close()
End If
End Try
Return strResult
End Function
End Class
End Namespace
Option Strict On
Imports System.Net
Imports System.Web
Imports System.Text
Imports System.IO
Namespace SoilNET.KRL.WebUtility
Public Class LoginRequest
Public Cookies As CookieCollection
Sub New()
End Sub
Public Function Login(ByVal Url As String, ByVal Params As String) As String
Dim strResult As String = getPageByPost(Url, Params)
Return strResult
End Function
Public Function getPageByPost(ByVal url As String, ByVal payload As String, Optional ByVal needEncode As Boolean = False) As String
Dim result As HttpWebResponse
Dim strResult As String =
Try
Dim req As HttpWebRequest
Dim RequestStream As Stream
Dim ReceiveStream As Stream
Dim encode As Encoding
Dim sr As StreamReader
req = CType(WebRequest.Create(url), HttpWebRequest)
req.Method = POST
req.ContentType = applicationx-www-form-urlencoded
req.CookieContainer = New CookieContainer
req.UserAgent = Mozilla4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; .NET CLR 1.0.3705)
If Not Me.Cookies Is Nothing Then
req.CookieContainer.Add(New Uri(url), Me.Cookies)
End If
Dim SomeBytes() As Byte
Dim UrlEncoded As New StringBuilder
Dim reserved() As Char = {ChrW(63), ChrW(61), ChrW(38)}
If payload Nothing Then
If needEncode Then '有些网站encode后反而出现中文乱码所以加上这个开关
Dim i As Integer = 0
Dim j As Integer
While i payload.Length
j = payload.IndexOfAny(reserved, i)
If j = -1 Then
UrlEncoded.Append(HttpUtility.UrlEncode(payload.Substring(i, payload.Length - i)))
Exit While
End If
UrlEncoded.Append(HttpUtility.UrlEncode(payload.Substring(i, j - i)))
UrlEncoded.Append(payload.Substring(j, 1))
i = j + 1
End While
SomeBytes = System.Text.Encoding.ASCII.Default.GetBytes(UrlEncoded.ToString())
Else
SomeBytes = System.Text.Encoding.ASCII.Default.GetBytes(payload)
End If
req.ContentLength = SomeBytes.Length
RequestStream = req.GetRequestStream()
RequestStream.Write(SomeBytes, 0, SomeBytes.Length)
RequestStream.Close()
Else
req.ContentLength = 0
End If
'result.Cookies = New CookieCollection
result = CType(req.GetResponse(), HttpWebResponse)
ReceiveStream = result.GetResponseStream()
encode = System.Text.Encoding.ASCII.Default
sr = New StreamReader(ReceiveStream, encode)
Dim read(256) As Char
Dim count As Integer = sr.Read(read, 0, 256)
Do While count 0
strResult &= New String(read, 0, count)
count = sr.Read(read, 0, 256)
Loop
Me.Cookies = req.CookieContainer.GetCookies(New Uri(url))
Catch Exc As Exception
Debug.Write(Exc.Message)
Finally
If Not result Is Nothing Then
result.Close()
End If
End Try
Return strResult
End Function
Public Function getPageByUrl(ByVal url As String) As String
Dim result As HttpWebResponse
Dim strResult As String =
Try
Dim req As HttpWebRequest
Dim ReceiveStream As Stream
Dim encode As Encoding
Dim sr As StreamReader
req = CType(WebRequest.Create(url), HttpWebRequest)
req.Method = GET
req.CookieContainer = New CookieContainer
req.UserAgent = Mozilla4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; .NET CLR 1.0.3705)
If Not Me.Cookies Is Nothing Then
req.CookieContainer.Add(New Uri(url), Me.Cookies)
End If
result = CType(req.GetResponse(), HttpWebResponse)
ReceiveStream = result.GetResponseStream()
encode = System.Text.Encoding.ASCII.Default
sr = New StreamReader(ReceiveStream, encode)
Dim read(256) As Char
Dim count As Integer = sr.Read(read, 0, 256)
Do While count 0
strResult &= New String(read, 0, count)
count = sr.Read(read, 0, 256)
Loop
Me.Cookies = req.CookieContainer.GetCookies(New Uri(url))
Catch Exc As Exception
Finally
If Not result Is Nothing Then
result.Close()
End If
End Try
Return strResult
End Function
End Class
End Namespace
- WebRequest保持Session和Cookie
- WebClient 保持 Session 和 Cookie
- WebClient 保持 Session 和 Cookie
- 利用Cookie和Session保持WEB客户端始终在线
- 利用Cookie和Session保持WEB客户端始终在线
- 利用Cookie和Session保持WEB客户端始终在线
- Django中Cookie和Session状态保持系列之十一
- Session和数据保持:
- session HTTP协议与状态保持 cookie
- 状态保持中的Cookie与Session
- 禁用cookie后session的保持
- cookie的使用与session的保持
- C#通过webRequest保持在同一Session中Post数据收藏
- 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
- 使用HttpClient模拟网站登陆sina邮箱(保持远程服务器session和cookie)
- 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
- 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
- flask中的session cookie 测试 和 项目中的用户状态保持
- 基于ActiveX控件的DirectX游戏开发
- HttpWebRequest 如何保留 Session
- 内核模块导出符号使用
- 顶级jQuery树插件
- 【整理】Android-Recovery Mode(recover模式详解)
- WebRequest保持Session和Cookie
- 如何保护.net中的dll文件(防破解、反编译)
- java+Eclipse+android环境的搭建
- [Serializable]在C#中的作用-NET 中的对象序列化
- QQ空间及邮箱验证码登录的校验方式及自动登录的解决方案
- oracle简单的备份
- ACE内存托管之ACE_Cached_Allocator使用
- 对于数组名取地址
- javascript对象的操作