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 StringByVal Params As StringAs String 
            Dim strResult As String = getPageByPost(Url, Params) 
            Return strResult 
        End Function
 
 
        Public Function getPageByPost(ByVal url As StringByVal payload As StringOptional ByVal needEncode As Boolean = FalseAs 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 StringAs 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
 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 空sd卡或文件系统不受支持怎么办 8个月宝宝吃了纸怎么办 宝宝出生两天了不吃不喝怎么办 八个月宝宝阴唇边红肿痛怎么办 儿童五周岁九个月比同龄矮怎么办 8个月宝宝长牙母乳喂养咬人怎么办 6周的孩子视力低常怎么办 宝宝吃了甜食生痰咳嗽怎么办 两个月的边牧抵抗力差怎么办 阴茎勃起后向上翘的厉害怎么办 5个月宝宝发烧38.5度怎么办 9个月宝宝发烧38.5度怎么办 八个月宝宝只吃母乳不吃奶粉怎么办 八个月母乳不够宝宝不吃奶粉怎么办 八个月宝宝吃母乳不吃奶粉怎么办 八个月宝宝戒奶不吃奶粉怎么办 刚满月的宝宝发烧38度怎么办 未满月的宝宝发烧38度怎么办 半月大的婴儿吃奶就漾奶怎么办 上司交给你不能完成的任务怎么办 电脑光驱里放入光碟放不出来怎么办 黑暗之魂3太难了怎么办 苹果手机下载的游戏闪退怎么办 宝宝两岁了不怎么爱拉大便怎么办? 小狗脖子发硬疼的直叫怎么办 厨房里有很多小虫子围着鸡蛋怎么办 狗生小狗后几天不吃饭怎么办 还没满月的小兔子突然死了怎么办 宝宝小鸡被蚊子咬后肿得很大怎么办 不知道是哪知兔子下的小兔怎么办 兔子生完小兔不吃东西了怎么办 人工喂养七天的小羊拉希怎么办 仔兔出生3天吃过奶就尿怎么办 小兔子买回来两天不拉屎怎么办 大狗生了小狗把小狗咬死了怎么办 狗妈妈一直咬小狗的脐带怎么办 狗狗体内驱虫驱不干净怎么办 打老鼠脚被老鼠咬了怎么办 天正画的cad打开显示空白怎么办 苹果手机信息被拉进群聊怎么办 空调的控制线的报验资料怎么办