0

对于我的 html 应用程序,我需要直接下载 JDK。这个 wget 命令似乎适用于它

wget --no-cookies --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" "http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-x64.tar.gz"   

我如何翻译这个发送自定义标头的 wget,理想情况下是一个 vbscript 行(我更喜欢 vbscript,但如果必须的话,我会满足于 javascript)。PS 我认为 --no-cookies 是可选的,但不确定。我不能使用直接下载链接的原因是oracle要求用户在下面的下载页面上单击接受协议。

此链接用于最新的下载 HTML 页面

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

这是最新的直接 .exe 链接(单击接受协议后)
http://download.oracle.com/otn-pub/java/jdk/7u17-b02/jdk-7u17-windows-x64.exe

或任何其他绕过接受协议问题的方法?

这是我的 vbscript 代码,它* 在第 4 行给出一个“未指定的错误”,带有setRequestHeader. gpw_e24 中的值我也尝试了上面给出的值,但没有用。

Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
URL="http://download.oracle.com/otn-pub/java/jdk/7u17-b02/jdk-7u17-windows-x64.exe"
saveto="c:\java.exe"     
objXMLHTTP.setRequestHeader "Cookie", "gpw_e24=http%3A%2F%2Fwww.oracle.com"
objXMLHTTP.open "POST", URL, false
objXMLHTTP.send()

If objXMLHTTP.Status = 200 Then
Set objADOStream = CreateObject("ADODB.Stream")
objADOStream.Open
objADOStream.Type = 1 'adTypeBinary

objADOStream.Write objXMLHTTP.ResponseBody
objADOStream.Position = 0 'Set the stream position to the start

Set objFSO = Createobject("Scripting.FileSystemObject")
If objFSO.Fileexists(saveTo) Then objFSO.DeleteFile saveTo
Set objFSO = Nothing

objADOStream.SaveToFile saveTo
objADOStream.Close
Set objADOStream = Nothing
End if

Set objXMLHTTP = Nothing

' Done
WScript.Quit
4

1 回答 1

1

要下载文件,您应该添加名称为Cookie且值为gpw_e24=http%3A%2F%2Fwww.oracle.com的请求标头

使用vbscript 中的代码下载文件(绕过无效证书错误),您应该尝试添加

xHttp.setRequestHeader "Cookie", "gpw_e24=http%3A%2F%2Fwww.oracle.com"

或者,您可以将wget.exe与您的脚本一起使用并调用它

从http://gnuwin32.sourceforge.net/packages/wget.htm下载二进制包(您只需要wget.exe,可能有一些必需的 dll-s)

upd:可能来自这个二进制文件http://community.openscg.com/se/oscg_nixutils.jsp的wget.exe会是一个更好的选择(因为没有依赖关系)

upd:我试过这个,但 oracle.com 返回 403。你的 WGET 命令也不起作用

Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
URL="http://download.oracle.com/otn-pub/java/jdk/7u17-b02/jdk-7u17-windows-x64.exe"
saveto="c:\\Users\\Sanya_Zol\\INET_ALL\\2013\\_tmp\\20130326\\java-dl.exe"     
objXMLHTTP.open "POST", URL, false
objXMLHTTP.setRequestHeader "Cookie", "gpw_e24=http%3A%2F%2Fwww.oracle.com%2Ftechnetwork%2Fjava%2Fjavase%2Fdownloads%2Fjdk7-downloads-1880260.html"
objXMLHTTP.send()

If objXMLHTTP.Status = 200 Then
    Set objADOStream = CreateObject("ADODB.Stream")
    objADOStream.Open
    objADOStream.Type = 1 'adTypeBinary

    objADOStream.Write objXMLHTTP.ResponseBody
    objADOStream.Position = 0 'Set the stream position to the start

    Set objFSO = Createobject("Scripting.FileSystemObject")
    If objFSO.Fileexists(saveTo) Then objFSO.DeleteFile saveTo
    Set objFSO = Nothing

    objADOStream.SaveToFile saveTo
    objADOStream.Close
    Set objADOStream = Nothing
    Set objXMLHTTP = Nothing
Else
    MsgBox objXMLHTTP.Status
End if
于 2013-03-26T12:17:31.970 回答