基本身份验证网页登录VB.NET


  • 大家好,我有一个问题,试图自动化我们的UPS安装。网页使用基本身份验证,并在加载页面时提示登录。我们无法访问注册表以在IE中启用此功能,因为它已被禁用。我曾尝试使用httpweb请求和响应来提取cookie,但它似乎从未发送回一个。我的逻辑是将cookie用于网络浏览器控件,这样它就不会要求登录。这是我的代码,我有:

    Dim request As HttpWebRequest = DirectCast(WebRequest.Create("http://10.106.206.249"), HttpWebRequest)
    Dim mycache = New CredentialCache()
    mycache.Add(New Uri("http://10.106.206.249"), "Basic", New NetworkCredential("User", "Pass"))
    request.Credentials = mycache
    request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14"
    request.CookieContainer = New CookieContainer()
    Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
    Dim cook As Cookie
    For Each cook In response.Cookies
        Console.WriteLine("Cookie:")
        Console.WriteLine("{0} = {1}", cook.Name, cook.Value)
        Console.WriteLine("Domain: {0}", cook.Domain)
        Console.WriteLine("Path: {0}", cook.Path)
        Console.WriteLine("Port: {0}", cook.Port)
        Console.WriteLine("Secure: {0}", cook.Secure)
        Console.WriteLine("When issued: {0}", cook.TimeStamp)
        Console.WriteLine("Expires: {0} (expired? {1})", cook.Expires, cook.Expired)
        Console.WriteLine("Don't save: {0}", cook.Discard)
        Console.WriteLine("Comment: {0}", cook.Comment)
        Console.WriteLine("Uri for comments: {0}", cook.CommentUri)
        Console.WriteLine("Version: RFC {0}", IIf(cook.Version = 1, "2109", "2965"))
        ' Show the string representation of the cookie.
        Console.WriteLine("String: {0}", cook.ToString())
    Next cook
    

我知道这在一定程度上是有效的,因为如果我使用了不正确的信用,我会抛出一个未授权的错误。因此,看起来要么我没有收到饼干,要么一个没有被发送。

我尝试过的另一种方法是用普通的Web发送一个标题。导航,但它的行为就像加载页面并提示登录:

    Dim authData
    Dim authHeader As String
    authData = System.Text.UnicodeEncoding.UTF8.GetBytes("User:Pass")
    authHeader = "Authorization: Basic: " & System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes("User:Pass")) & Chr(13) & Chr(10)
    Web.Navigate("http://10.106.206.249", False, Nothing, authHeader)

有人知道我是不是做错了什么吗?

一个更简单的解决方案是:

Web.Navigate("http://Administrator:retail@10.106.206.249")

请注意,如果你的密码中有一个@sign,你必须对其进行UrlEncode。(我不能100%确定密码是否仍然有效(

最新更新