当我试图从Oracle下载Java时,我最终下载了一个页面,告诉我需要同意OTN许可条款。
对不起! 为了从Oracle技术网络下载产品,您必须同意OTN许可条款。 请务必…… 你的浏览器已经启用了“cookies”和JavaScript。 您点击了希望下载的产品的“接受许可”。 在接受许可后的30分钟内尝试下载。
如何下载及安装Java?
当我试图从Oracle下载Java时,我最终下载了一个页面,告诉我需要同意OTN许可条款。
对不起! 为了从Oracle技术网络下载产品,您必须同意OTN许可条款。 请务必…… 你的浏览器已经启用了“cookies”和JavaScript。 您点击了希望下载的产品的“接受许可”。 在接受许可后的30分钟内尝试下载。
如何下载及安装Java?
当前回答
(Irani更新了我的答案,但在这里澄清一下。)
编辑:针对Java 17.0.1更新,于2021年10月19日发布
Wget
wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
更多信息请参见oracle.com上的下载。
-c /——继续
允许继续未完成的下载。
——header "Cookie: oracelicense =accept-securebackup-cookie"
自2014年3月15日起,在接受许可协议后,此cookie将提供给用户,并且是访问download.oracle.com中的Java包所必需的。2012年3月27日的前一个(也是第一个)实现使用了cookie gpw_e24=http%3A%2F%2Fwww.oracle.com[…]。这两起案件都未向公众公布。
该值不一定为accept-securebackup-cookie。
不是必需的
——无cookie
“Cookie: name=value”标题的组合“no-cookies”作为“官方”Cookie支持被提到,但在这里并不是严格要求的。
cURL
curl -L -C - -b "oraclelicense=accept-securebackup-cookie" -O https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
-L /——位置
需要cURL重定向通过所有镜像。
-c /——continue-at -
见上图。cURL最后需要破折号(-)。
"避风头"饼干
与-H /——header "Cookie:…"相同,但也接受文件。
-O
cURL保存文件所必需的(参见[作者的比较][8]了解更多差异)。
其他回答
这是因为当你在浏览器的下载页面上点击“接受”按钮时,网页会保存一个cookie,在让你下载文件之前,它会用来检查你的同意。当尝试使用wget从命令行下载文件时出现了问题,这是因为wget下载文件的请求中没有发送cookie信息,因此从文件服务器的角度来看,您是一个尚未接受许可协议的全新用户。
一种解决方案是使用wget实用程序的——header选项发送cookie信息(如上面的其他答案所示)。理想情况下,如果某些内容受到保护,则可以使用wget提供的各种会话管理选项。然而,对于这个特殊的问题,(目前)通过发送下载请求的Cookie报头来解决。
甲骨文在下载链接上放置了一个防止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
你应该试试:
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
oracle-java-download是GitHub上的一个项目,允许您为JDK 8和JDK 9创建下载链接,您可以使用这些链接进行进一步处理,例如在自动构建或部署过程中。
它需要Linux、Docker和JDK >= 8才能运行。
我没有为每一个新的Java版本都使用一个新的链接或更改现有的脚本,而是寻找一种更通用的方法来自动下载所需的Java包,然后通过yum localinstall ${JAVA_ENVIRONMENT}-${JAVA_VERSION}-linux-x64.rpm进行安装。
我使用了一种类似于手动/用户操作的简单方法来查找包并下载它。我也非常确定,通过使用其他工具(如egrep、awk等),人们会找到一种更优雅的方式来完成它。,所以这里留一个例子:
#!/bin/bash
### Proxy settings
# If there is a company proxy
PROXY="my.proxy.local:8080"
PROXY_TYPE="--proxy-ntlm" # or leave empty with ""
USER="user"
PASS='pass'
### Find out the links to JRE and JDK
# To do so, got to the page http://www.oracle.com/technetwork/java/javase/downloads/
BASE_URL="technetwork/java/javase/downloads"
# Put the whole page into a single string/line
BASE_URL_OUTPUT="$(curl -s -k ${PROXY_TYPE} -x "http://${USER}:${PASS}@${PROXY}" -L0 http://www.oracle.com/${BASE_URL}/)"
# Define the environments to download
JAVA_ENVIRONMENTS=("JRE" "JDK") # ! yet "SERVER-JRE"
for JAVA_ENVIRONMENT in "${JAVA_ENVIRONMENTS[@]}"
do
echo
echo "JAVA_ENVIRONMENT="$JAVA_ENVIRONMENT
echo
for (( JAVA_BASE_VERSION = 8; JAVA_BASE_VERSION <= 10; JAVA_BASE_VERSION += 2 ))
do
echo "JAVA_BASE_VERSION="$JAVA_BASE_VERSION
### "Read the page"
# and follow the links for the package interested in
DOWNLOAD_SITE="$(echo $BASE_URL_OUTPUT | grep -m 1 -io "${JAVA_ENVIRONMENT}${JAVA_BASE_VERSION}-downloads-[0-9]*.html" -- | tail -1)"
echo "DOWNLOAD_SITE="$DOWNLOAD_SITE
### Gather the necessary download links
# To do so, following the link to the download site
# reading and accept the license
#
# ... the greedy regular expression is to address the different syntax of the links
# and already prepared for OR .gz files
DOWNLOAD_LINK_OUTPUT="$(curl -s -k ${PROXY_TYPE} -x "http://${USER}:${PASS}@${PROXY}" -L -j -H "Cookie: oraclelicense=accept-securebackup-cookie" http://www.oracle.com/${BASE_URL}/${DOWNLOAD_SITE} | grep -io "filepath.*${JAVA_ENVIRONMENT}-[${JAVA_BASE_VERSION}].*linux[-_]x64[._].*\(rpm\)" -- | cut -d '"' -f 3 | tail -1)"
# and echo out the link
echo "DOWNLOAD_LINK_OUTPUT="$DOWNLOAD_LINK_OUTPUT
done
done
由于下载链接现已可用,您可以进一步使用wget或curl。