0
  • こんにちは、UPS の設置を自動化しようとして問題が発生しています。Web ページは基本認証を使用し、ページの読み込み時にログインを求めます。IE でこの機能が無効になっているため、レジストリにアクセスして有効にすることはできません。httpwebrequest と response を使用して Cookie を取得しようとしましたが、Cookie を送り返すようには見えません。そのための私のロジックは、その Cookie を Web ブラウザー コントロールに使用して、ログインを要求しないようにすることでした。これが私のコードです。

    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
    

間違ったクレデンシャルを使用すると、未解決のエラーがスローされるため、これがある程度機能することはわかっています。そのため、Cookie を取得していないか、Cookie が送信されていないようです。

私が試した別の方法は、通常の Web.Navigate でヘッダーを送信することですが、それはページを読み込んでログインを要求するように動作します。

    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)

ここで何か間違ったことをしているのかもしれません。

4

1 に答える 1

0

より簡単な解決策は次のとおりです。

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

パスワードに @ 記号が含まれている場合は、それを UrlEncode する必要があることに注意してください。(パスワードがまだ機能するかどうかは100%確信が持てません)

于 2013-04-19T14:59:19.493 に答える