当我试图从Oracle下载Java时,我最终下载了一个页面,告诉我需要同意OTN许可条款。

对不起! 为了从Oracle技术网络下载产品,您必须同意OTN许可条款。 请务必…… 你的浏览器已经启用了“cookies”和JavaScript。 您点击了希望下载的产品的“接受许可”。 在接受许可后的30分钟内尝试下载。

如何下载及安装Java?


当前回答

截至2017-04-25,公认的答案对我不适用。然而,简单的解决方案是使用-b标志而不是——header选项。

例如,要获取jdk-1.8_131:

version='8u131'; wget -H -O jdk-$version-linux-x64.tar.gz --no-check-certificate --no-cookies -b "oraclelicense=a" http://download.oracle.com/otn-pub/java/jdk/$version-b11/jdk-$version-linux-x64.tar.gz

它将在后台执行,并将输出写入wget-log。

其他回答

你应该试试:

wget \
        --no-cookies \
        --header "Cookie: oraclelicense=accept-securebackup-cookie" \
        http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/jdk-8u172-linux-x64.tar.gz \
        -O java.tar.gz

以上所有内容似乎都假设您知道最新Java RPM的URL……

Oracle提供了到每个Java版本最新更新的持久链接 https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=397248601136938&id=1414485.1 -尽管您需要创建/登录到Oracle支持帐户。*否则,您只能访问每个Java版本的最后一次“公开”更新,例如1.6_u45(2013年3月;最新更新为u65, 2013年10月)*

一旦你知道了持久链接,你应该能够将其解析为真正的下载; 以下对我有用,尽管我还不知道“aru”引用是否发生了变化。

ME=<myOracleID>
PW=<myOraclePW>
PATCH_FILE=p13079846_17000_Linux-x86-64.zip

echo "Get real URL from the persistent link"

wget -o getrealurl.out --no-cookies --no-check-certificate --user=$ME \
--password=$PW --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" \
https://updates.oracle.com/Orion/Services/download/$PATCH_FILE?aru=16884382&\
patch_file=$PATCH_FILE

wait    # wget appears to go into background, so "wait" waits 
        # until all background processes complete

REALURL=`grep "^--" getrealurl.out |tail -1 |sed -e 's/.*http/http/'`
wget -O $PATCH_FILE $REALURL
#These last steps must be done quickly, as the REALURL seems to have a short-lived 
#cookie on it and I've had no success with  --keep-session-cookies etc.

这是因为当你在浏览器的下载页面上点击“接受”按钮时,网页会保存一个cookie,在让你下载文件之前,它会用来检查你的同意。当尝试使用wget从命令行下载文件时出现了问题,这是因为wget下载文件的请求中没有发送cookie信息,因此从文件服务器的角度来看,您是一个尚未接受许可协议的全新用户。

一种解决方案是使用wget实用程序的——header选项发送cookie信息(如上面的其他答案所示)。理想情况下,如果某些内容受到保护,则可以使用wget提供的各种会话管理选项。然而,对于这个特殊的问题,(目前)通过发送下载请求的Cookie报头来解决。

我已经为我的gentoo盒子制作了一个jdk-download脚本(特定于tar.gz)。不需要像其他类似的脚本那样更新,尝试“强制”下载您想要的任何版本的最新版本。

使用

jdk-download< <version> <platform> [<build>]

* <version> - Something like "8u40"
* <platform> - Usually i586 or x64
* <build> - The internal build number used by oracle, to avoid guessing and trying to download starting from 99 to 1 (build 0, really?!!)

博客

bitbucket源码

甲骨文在下载链接上放置了一个防止cookie,迫使你同意这些条款,尽管使用Java的许可协议明确规定,只要使用Java,你就“同意”了许可。

Oracle想要的方法是你下载它的时候有一个协议。在此之后,可以针对特定的Linux修改此脚本

#!/bin/bash
#Author: Yucca Nel http://thejarbar.org
#Will restart system
#Modify these variables as needed...
tempWork=/tmp/work
locBin=/usr/local/bin
javaUsrLib=/usr/lib/jvm

sudo mkdir -p $javaUsrLib
mkdir -p $tempWork
cd $tempWork

#Extract the download
tar -zxvf $downloadDir/jdk*tar.gz

#Move it to where it can be found...

sudo mv -f $tempWork/jdk* $javaUsrLib/

sudo ln -f -s $javaUsrLib/jdk1/bin/* /usr/bin/

#Update this line to reflect versions of JDK...
export JAVA_HOME="$javaUsrLib/jdk1.7.0_03"
#Extract the download
tar -zxvf $tempWork/*

#Move it to where it can be found...

sudo mv -f $tempWork/jdk1* $javaUsrLib/

sudo ln -f -s $javaUsrLib/jdk1*/bin/* /usr/bin/
sudo rm -rf $tempWork
#Update this line to reflect newer versions of JDK...
export JAVA_HOME="$javaUsrLib/jdk1.7.0_03"

if ! grep "JAVA_HOME=$javaUsrLib/jdk1.7.0_03" /etc/environment
then
    echo "JAVA_HOME=$javaUsrLib/jdk1.7.0_03"| sudo tee -a /etc/environment
fi


exit 0