WebRequest保持Session和Cookie

本文介绍了一个使用C#实现的Web登录请求案例,通过保存Cookie来维持登录状态。文章详细展示了如何利用HttpWebRequest发送POST请求,并处理响应数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近用到了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
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值