0

我正在编写一个使用sentinelsatPython API 下载 Sentinel 2 产品(卫星图像)的脚本。

产品的描述采用 JSON 结构并包含参数quicklook_url

例子:

https://apihub.copernicus.eu/apihub/odata/v1/Products('862619d6-9b82-4fe0-b2bf-4e1c78296990')/Products('Quicklook')/$value

任何 Sentinel API 调用都需要凭据。检索产品并打开存储在其中的链接也是如此quicklook_url。当我在浏览器中调用示例时,系统会要求我输入用户名和密码以获取

在此处输入图像描述

同名S2A_MSIL2A_20210625T065621_N0300_R063_T39NTJ_20210625T093748-ql.jpg

不用说我只是从 API 开始,所以我可能遗漏了一些东西,但是

requests.post(product_description['quicklook_url'], verify=False, auth=HTTPBasicAuth(username, password)).content

产生 0KB 损坏的文件和

requests.get(product_description['quicklook_url']).content

产生 1KB 损坏的文件。

我调查过requests.Session

session = requests.Session()
session.auth = (username, password)
auth = session.post('URL_FOR_LOGING_IN')
img = session.get(product_description['quicklook_url']).content

问题是我找不到发布会话身份验证所需的 URL。我有点确定sentinelsatAPI 可以做到这一点,但我的外观并没有产生任何成功的结果。

我目前正在SentinelAPI上课。它具有download_quicklook()我现在正在使用的功能,但我仍然很好奇如何在没有该功能的情况下做到这一点。

4

1 回答 1

0

我想您不需要发送发布请求。基本身份验证通过与每个请求一起发送标头来工作。以下应该工作

session = requests.Session()
session.auth = (username, password)
img = session.get(product_description['quicklook_url']).content

我认为由于使用 POST,您的第一次尝试失败了。

requests.gett(product_description['quicklook_url'], verify=False, auth=HTTPBasicAuth(username, password)).content

也应该工作。

于 2022-01-22T07:41:59.660 回答