0

我正在尝试创建一个名为login 的类,该类登录到网站并将 cookie 保存在cookiecontainer. 然后我想使用保存在cookiecontainer其他类中的cookie。我了解如何发出请求并将 cookie 保存在 a 中cookiecontainer,但是我不知道如何cookiecontainer在另一个类中使用 。我是否将其cookiecontainer设为公共共享类型?然后如何从该类的特定实例访问 cookie?

代码:

我正在使用来自http://howtostartprogramming.com/vb-net/vb-net-tutorial-52-httpwebrequest-cookiecontainer/的代码。

Imports System.Net
Imports System.Text
Imports System.IO

Public Class Login

    Public shared logincookie As CookieContainer

    Private Sub Login()

        Dim postData As String = "poststring"
        Dim tempCookies As New CookieContainer
        Dim encoding As New UTF8Encoding
        Dim byteData As Byte() = encoding.GetBytes(postData)

        Dim postReq As HttpWebRequest = DirectCast(WebRequest.Create("website"), HttpWebRequest)
        postReq.Method = "POST"
        postReq.KeepAlive = True
        postReq.CookieContainer = tempCookies
        postReq.ContentLength = byteData.Length

        Dim postreqstream As Stream = postReq.GetRequestStream()
        postreqstream.Write(byteData, 0, byteData.Length)
        postreqstream.Close()
        Dim postresponse As HttpWebResponse

        postresponse = DirectCast(postReq.GetResponse(), HttpWebResponse)
        tempCookies.Add(postresponse.Cookies)
        logincookie = tempCookies

    End Sub

End Class
4

1 回答 1

1

向您的项目添加一个模块,将其公开。

在其中创建一个公共属性。

Public Module Globals
    Public Property GlobalCookies As CookieContainer
End Module

这将允许您与同一解决方案中的其他类共享。

您应该小心使用全局变量,因为它们会增加复杂性并可能导致难以发现的错误。

是的,这在功能上等同于类上的共享类型。由于 VB 没有共享类,尽管我倾向于使用模块,因为它们实际上是共享类。您可以拥有一个所有属性都共享的类,这几乎是一回事,但是您必须记住不要将非共享属性放在该类上。

我不建议将共享状态放在曾经实例化的类上,因为状态超出了类的范围并且不是 OO。当然,共享功能是完全可以接受的,因为它允许您将类似的行为分组到一个物理位置。

于 2013-08-28T13:39:46.690 回答