2014-04-11 51 views
0

我想用VBScript检索和处理一些网页,该网页是从命令行运行的。值得一提的是,我在一台工作计算机上,“某些设置由系统管理员管理”。另外,我用CAC登录计算机,所以(我认为这是问题),涉及证书。无法通过VBScript检索网页,除非首先在浏览器中打开

我的问题是,经常在运行VBScript时,我会为HTTPS和非HTTPS站点返回401 /未授权错误。如果我然后在浏览器中打开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 

有什么想法?

回答

0

您必须使用xmlhttp对象正确获取url。运行此代码并输出错误消息(您可以使用Ctrl + C复制消息框)。

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 
+0

在上面的程序中运行您的URL并粘贴结果后。来自http://docs.telerik.com/fiddler/configure-fiddler/tasks/configurefiddler的D/l fiddler并记录工作和非工作连接。 –

+0

您也不会显示您在代码中使用的对象。你在最后创建它,但不要开始。这里的任何方式都是fewother objectsto尝试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 –

相关问题