除非先在浏览器中打开,否则无法通过VBScript检索网页
我想用VBScript检索和处理一些网页,VBScript是从命令行运行的。值得一提的是,我在一台工作计算机上,一些设置由您的系统管理员管理。另外,我使用CAC登录到计算机,因此我认为这就是涉及证书的问题 我的问题是,当我运行VBScript时,对于HTTPS和非HTTPS站点,经常会返回401/unauthorized错误。如果我在浏览器中打开URL,仍然从命令行运行的脚本将起作用。如果我在家用电脑上运行脚本,我可以随时访问任何URL,而不必首先在浏览器中打开它。因此,我猜这与CAC中的证书有关,这些证书也安装在计算机上,或者与计算机上用于验证连接的其他证书或类似的东西有关 我的问题是:如何使用VBScript检索各种网页而不安装任何其他软件,而不必首先在浏览器中打开URL以使脚本正常工作 以下是我获取网页的代码,如果有帮助的话:除非先在浏览器中打开,否则无法通过VBScript检索网页,vbscript,Vbscript,我想用VBScript检索和处理一些网页,VBScript是从命令行运行的。值得一提的是,我在一台工作计算机上,一些设置由您的系统管理员管理。另外,我使用CAC登录到计算机,因此我认为这就是涉及证书的问题 我的问题是,当我运行VBScript时,对于HTTPS和非HTTPS站点,经常会返回401/unauthorized错误。如果我在浏览器中打开URL,仍然从命令行运行的脚本将起作用。如果我在家用电脑上运行脚本,我可以随时访问任何URL,而不必首先在浏览器中打开它。因此,我猜这与CAC中的证书有
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