【问题标题】:vbscript xmlhttp request authentication. access is deniedvbscript xmlhttp 请求认证。访问被拒绝
【发布时间】:2014-06-11 19:31:28
【问题描述】:

我正在尝试从 VLC Web 界面获取一个 xmldocument。过去我的脚本按预期工作,但是最近版本的 VLC 引入了身份验证来访问 Web 界面,似乎没有办法禁用它(或更改用户名)。

            On Error Resume Next
            Set xmlDoc = CreateObject("Msxml2.XMLHTTP.6.0")

            xmlDoc.Open "GET","http://localhost:8080/requests/status.xml", false, "", "password"
            xmlDoc.send()

我知道我提供的用户/密码是正确的,因为我可以通过浏览器访问文档。有什么想法吗?

谢谢

【问题讨论】:

  • 您可以提供实际错误吗?

标签: xml authentication vbscript xmlhttprequest vlc


【解决方案1】:

问题是我需要用base64格式的密码设置请求头

xmlDoc.Open "GET","http://localhost:8080/requests/status.xml", false, "", "password"
xmlDoc.send()

应该是

Dim base64pw
base64pw = "OnBhc3N3b3Jk"
xmlDoc.Open "GET","http://localhost:8080/requests/status.xml", false, "", "password"
xmlDoc.setRequestHeader "Authorization", "Basic "& base64pw
xmlDoc.send()

【讨论】:

    【解决方案2】:

    使用 xmlhttp 试试这个方法。编辑网址等。如果它似乎工作注释掉 if / end if to dump info 即使看起来工作。它是 vbscript,但 vbscript 在 vb6 中工作。

     On Error Resume Next
     Set File = WScript.CreateObject("Microsoft.XMLHTTP")
     File.Open "GET", "http://www.microsoft.com/en-au/default.aspx", False
     'This is IE 8 headers
     File.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; .NET4.0E; BCD2000; BCD2000)"
     File.Send
     If err.number <> 0 then 
        line =""
        Line  = Line &  vbcrlf & "" 
        Line  = Line &  vbcrlf & "Error getting file" 
        Line  = Line &  vbcrlf & "==================" 
        Line  = Line &  vbcrlf & "" 
        Line  = Line &  vbcrlf & "Error " & err.number & "(0x" & hex(err.number) & ") " & err.description 
        Line  = Line &  vbcrlf & "Source " & err.source 
        Line  = Line &  vbcrlf & "" 
        Line  = Line &  vbcrlf & "HTTP Error " & File.Status & " " & File.StatusText
        Line  = Line &  vbcrlf &  File.getAllResponseHeaders
        wscript.echo Line
        Err.clear
        wscript.quit
     End If
    
    On Error Goto 0
    
     Set BS = CreateObject("ADODB.Stream")
     BS.type = 1
     BS.open
     BS.Write File.ResponseBody
     BS.SaveToFile "c:\users\test.txt", 2
    

    还要看看这些其他对象是否有效。

    C:\Users>reg query hkcr /f xmlhttp
    
    HKEY_CLASSES_ROOT\Microsoft.XMLHTTP
    HKEY_CLASSES_ROOT\Microsoft.XMLHTTP.1.0
    HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP
    HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.3.0
    HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.4.0
    HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.5.0
    HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.6.0
    HKEY_CLASSES_ROOT\Msxml2.XMLHTTP
    HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.3.0
    HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.4.0
    HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.5.0
    HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.6.0
    End of search: 12 match(es) found.
    

    【讨论】:

    • 另外请注意,在发生锁定之前调用任何特定 XMLHTTP 对象的次数是有限制的。如果发生这种情况,并且在调试代码时确实如此,只需更改为不同的 xmlhttp 对象。
    • 我知道这太晚了。但问题是我没有设置请求标头。
    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 2017-06-18
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多