Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
除非先在浏览器中打开,否则无法通过VBScript检索网页_Vbscript - Fatal编程技术网

除非先在浏览器中打开,否则无法通过VBScript检索网页

除非先在浏览器中打开,否则无法通过VBScript检索网页,vbscript,Vbscript,我想用VBScript检索和处理一些网页,VBScript是从命令行运行的。值得一提的是,我在一台工作计算机上,一些设置由您的系统管理员管理。另外,我使用CAC登录到计算机,因此我认为这就是涉及证书的问题 我的问题是,当我运行VBScript时,对于HTTPS和非HTTPS站点,经常会返回401/unauthorized错误。如果我在浏览器中打开URL,仍然从命令行运行的脚本将起作用。如果我在家用电脑上运行脚本,我可以随时访问任何URL,而不必首先在浏览器中打开它。因此,我猜这与CAC中的证书有

我想用VBScript检索和处理一些网页,VBScript是从命令行运行的。值得一提的是,我在一台工作计算机上,一些设置由您的系统管理员管理。另外,我使用CAC登录到计算机,因此我认为这就是涉及证书的问题

我的问题是,当我运行VBScript时,对于HTTPS和非HTTPS站点,经常会返回401/unauthorized错误。如果我在浏览器中打开URL,仍然从命令行运行的脚本将起作用。如果我在家用电脑上运行脚本,我可以随时访问任何URL,而不必首先在浏览器中打开它。因此,我猜这与CAC中的证书有关,这些证书也安装在计算机上,或者与计算机上用于验证连接的其他证书或类似的东西有关

我的问题是:如何使用VBScript检索各种网页而不安装任何其他软件,而不必首先在浏览器中打开URL以使脚本正常工作

以下是我获取网页的代码,如果有帮助的话:

function getWebPage(sURL)
    dim iErrorCount

    on error resume next
    '******************
    'ERROR CHECKING OFF
    '******************
    oHTTP.Open "GET", sURL, False
    oHTTP.Send

    if (err.number <> 0) then
        iErrorCount = 0

        do
            iErrorCount = iErrorCount + 1

            log "log.txt", "Error retrieving Web page. Error #0x" & hex(err.number) & ". Description: " & err.description, 0, true

            if (iErrorCount = 5) then
                log "log.txt", vbTab & "Five successive errors retrieving Web page. Exiting...", 1, true
                msgbox "ERROR: Five successive errors retrieving " & chr(34) & sURL & chr(34) & vbCRLF & vbCRLF & "See the log file for details." & vbCRLF & vbCRLF & "Exiting...", vbOkOnly, programName

                log "last result.html", oHTTP.ResponseText, 0, false

                wscript.quit
            else
                wscript.sleep iErrorCount * 60000

                set oHTTP = nothing
                set oHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")

                oHTTP.Open "GET", sURL, False
                oHTTP.Send
            end if
        loop until (err.number = 0)
    end if
    on error goto 0
    '*****************
    'ERROR CHECKING ON
    '*****************

    if (oHTTP.Status <> 200) then
        log "log.txt", vbcrlf & vbtab & "Error retrieving Web page" & vbcrlf & vbtab & "URL: " & sURL & vbcrlf & vbtab & "Status: " & oHTTP.Status & vbcrlf & vbtab & "Description: " & oHTTP.statusText, 1, true
        msgbox "ERROR: Cannot retrieve Web page." & vbCRLF & vbCRLF & "See the log file for details." & vbCRLF & vbCRLF & "Exiting...", vbOkOnly, programName

        wscript.quit
    else
    '   log "last result.html", oHTTP.ResponseText, 0, false
        getWebPage = oHTTP.ResponseText
    end if
end function

有什么想法吗?

您必须使用xmlhttp对象准确地获取url。运行此代码并打印出错误消息。您可以使用Ctrl+C复制messagebox

 Set fso = CreateObject("Scripting.FileSystemObject")
 Set Outp = Wscript.Stdout
 On Error Resume Next
 Set File = WScript.CreateObject("Microsoft.XMLHTTP")
 File.Open "GET", "ftp://ftp.microsoft.com/Softlib/README.TXT", False
 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\safetyscanner.exe", 2

在你用你的URL运行上面的程序并粘贴结果之后。从工作连接和非工作连接进行D/l fiddler并记录。您也不会在代码中显示正在使用的对象。您可以在末尾创建它,但不能从开头创建。无论如何,这里还有一些反对者尝试HKEY_CLASSES_ROOT\Microsoft.XMLHTTP HKEY_CLASSES_ROOT\Microsoft.XMLHTTP.1.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