使用wget从LP DAAC数据池下载GEDI数据时无法建立SSL连接
环境信息
- wget版本:1.21.3(64位)
- 操作系统:Windows 11
- 已尝试操作:在命令提示符和Pycharm中运行wget,添加
--no-check-certificate参数
错误现象
连接EarthData服务已成功获取到可手动在浏览器打开下载的链接,但wget在访问跳转后的认证链接时,最后一步返回SSL连接失败。
完整返回信息
--2022-08-14 09:51:09-- https://e4ftl01.cr.usgs.gov//GEDI_L1_L2/GEDI/GEDI01_B.002/2019.04.20/GEDI01_B_2019110092939_O01996_01_T03334_02_005_01_V002.h5
Resolving e4ftl01.cr.usgs.gov (e4ftl01.cr.usgs.gov)... 2001:49c8:4000:127d::133:130, 152.61.133.130
Connecting to e4ftl01.cr.usgs.gov (e4ftl01.cr.usgs.gov)|2001:49c8:4000:127d::133:130|:443... failed: Bad file descriptor.
Connecting to e4ftl01.cr.usgs.gov (e4ftl01.cr.usgs.gov)|152.61.133.130|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://urs.earthdata.nasa.gov/oauth/authorize?scope=uid&app_type=401&client_id=ijpRZvb9qeKCK5ctsn75Tg&response_type=code&redirect_uri=https%3A%2F%2Fe4ftl01.cr.usgs.gov%2Foauth&state=aHR0cHM6Ly9lNGZ0bDAxLmNyLnVzZ3MuZ292Ly9HRURJX0wxX0wyL0dFREkvR0VESTAxX0IuMDAyLzIwMTkuMDQuMjAvR0VESTAxX0JfMjAxOTExMDA5MjkzOV9PMDE5OTZfMDFfVDAzMzM0XzAyXzAwNV8wMV9WMDAyLmg1 [following]
--2022-08-14 09:51:55-- https://urs.earthdata.nasa.gov/oauth/authorize?scope=uid&app_type=401&client_id=ijpRZvb9qeKCK5ctsn75Tg&response_type=code&redirect_uri=https%3A%2F%2Fe4ftl01.cr.usgs.gov%2Foauth&state=aHR0cHM6Ly9lNGZ0bDAxLmNyLnVzZ3MuZ292Ly9HRURJX0wxX0wyL0dFREkvR0VESTAxX0IuMDAyLzIwMTkuMDQuMjAvR0VESTAxX0JfMjAxOTExMDA5MjkzOV9PMDE5OTZfMDFfVDAzMzM0XzAyXzAwNV8wMV9WMDAyLmg1
Resolving urs.earthdata.nasa.gov (urs.earthdata.nasa.gov)... 2001:4d0:241a:4081::89, 198.118.243.33
Connecting to urs.earthdata.nasa.gov (urs.earthdata.nasa.gov)|2001:4d0:241a:4081::89|:443... failed: Bad file descriptor.
Connecting to urs.earthdata.nasa.gov (urs.earthdata.nasa.gov)|198.118.243.33|:443... connected.
Unable to establish SSL connection.
解决方案
1. 强制wget使用IPv4
从日志看,wget优先尝试IPv6连接失败,切换到IPv4后SSL握手仍出问题。强制wget仅用IPv4,添加--inet4-only参数:
wget --no-check-certificate --inet4-only <你的GEDI数据链接>
2. 配置EarthData认证信息
LP DAAC数据需要EarthData账号认证,wget无法自动处理OAuth跳转导致失败。在用户目录(C:\Users\<你的用户名>)下创建.netrc文件,内容如下:
machine urs.earthdata.nasa.gov login <你的EarthData用户名> password <你的EarthData密码>
然后运行wget时添加cookie相关参数,自动处理认证:
wget --no-check-certificate --inet4-only --load-cookies cookies.txt --save-cookies cookies.txt --keep-session-cookies <你的GEDI数据链接>
3. 更新SSL证书库
Windows下wget依赖系统SSL证书,可尝试更新系统根证书,或指定CA证书文件:
wget --ca-certificate=./cacert.pem --inet4-only <你的GEDI数据链接>
(cacert.pem可下载Mozilla官方的CA证书包)
4. 改用curl工具
curl对SSL和认证的处理更灵活,配置好.netrc后用以下命令:
curl -L --netrc --output <保存文件名> <你的GEDI数据链接>
内容的提问来源于stack exchange,提问作者Living

