You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NASA HDF文件下载失败求助:Requests/urllib无法获取71MB文件

解决NASA HDF文件下载失败的问题

问题根源

你遇到的下载失败(仅下载11KB)是因为NASA的LADS Web归档数据需要Earthdata账号认证,未提供认证信息时,服务器返回的是登录提示页面而非实际数据文件。另外,你用h5py直接写入response.content的方式是错误的——h5py是用于读写本地HDF5文件的工具,不能直接处理HTTP响应内容。

解决步骤

1. 注册Earthdata账号

首先需要注册NASA的Earthdata账号,这是访问EOSDIS归档数据的必要前提。

2. 带认证的分块下载(推荐用requests)

使用requests会话保持认证,并分块下载大文件(避免内存占用过高):

import requests

# 替换为你的Earthdata账号信息
username = "你的Earthdata用户名"
password = "你的Earthdata密码"
url = "https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MOD021KM/2022/152/MOD021KM.A2022152.1930.061.2022153073644.hdf"

# 创建会话并设置认证
session = requests.Session()
session.auth = (username, password)

# 分块下载文件
with session.get(url, stream=True) as response:
    response.raise_for_status()  # 检查请求是否成功
    with open("MOD021KM.A2022152.1930.061.2022153073644.hdf", "wb") as f:
        for chunk in response.iter_content(chunk_size=8192):
            f.write(chunk)

3. 使用urllib带认证下载

如果偏好urllib,可以添加HTTP基本认证处理器:

from urllib.request import build_opener, HTTPBasicAuthHandler, install_opener, urlretrieve

username = "你的Earthdata用户名"
password = "你的Earthdata密码"
url = "https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MOD021KM/2022/152/MOD021KM.A2022152.1930.061.2022153073644.hdf"

# 配置认证处理器
auth_handler = HTTPBasicAuthHandler()
auth_handler.add_password(realm="LADS", uri=url, user=username, passwd=password)
opener = build_opener(auth_handler)
install_opener(opener)

# 执行下载
local_filename, headers = urlretrieve(url)
print(f"文件已保存至:{local_filename}")

4. 正确使用h5py读取文件

下载完成后,再用h5py读取本地HDF文件:

import h5py

with h5py.File("MOD021KM.A2022152.1930.061.2022153073644.hdf", "r") as f:
    print("文件中的数据集:", list(f.keys()))

内容的提问来源于stack exchange,提问作者M.javad.soltani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:00:31