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

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

如何下载及安装Java?


当前回答

这适用于JDK 6,你只需要将下载url替换为最新版本。

wget --no-cookies --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2Ftechnetwork%2Fjava%2Fjavase%2Fdownloads%2Fjdk6-downloads-1637591.html;" http://download.oracle.com/otn-pub/java/jdk/6u33-b03/jdk-6u33-linux-x64.bin

其他回答

我已经为我的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,在让你下载文件之前,它会用来检查你的同意。当尝试使用wget从命令行下载文件时出现了问题,这是因为wget下载文件的请求中没有发送cookie信息,因此从文件服务器的角度来看,您是一个尚未接受许可协议的全新用户。

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

(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]了解更多差异)。

为什么不点击从浏览器下载,然后复制和粘贴下载的确切链接,例如:

wget http://download.oracle.com/otn-pub/java/jdk/7u40-b43/jdk-7u40-linux-x64.tar.gz?AuthParam=1380225131_dd70d2038c57a4729d8c0226684xxxx

在oracle中接受术语后,您可以通过查看浏览器的network选项卡找到链接并点击下载。Chrome浏览器下的F12。Firefox中的Firebug。

我没有为每一个新的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。