urllib:从直接下载中获取文件名 link

urllib: Get name of file from direct download link

Python 3. 可能需要用到urllib,

我需要知道如何向直接下载发送请求 link,并获取它试图保存的文件的名称。

(例如,来自 CurseForge 的 KSP mod:https://kerbal.curseforge.com/projects/mechjeb/files/2355387/download

当然,文件ID(2355387)会被改变。它可以来自任何项目,但总是在 CurseForge 上。 (如果这对下载方式有影响。)

该示例 link 生成文件:

如何 return Python 中的那个文件名?

编辑: 我应该注意,我想避免保存文件,读取名称,然后尽可能删除它。这似乎是最糟糕的方法。

使用 urllib.request,当您请求来自 url 的响应时,该响应包含对您正在下载的 url 的引用。

>>> from urllib.request import urlopen    
>>> url = 'https://kerbal.curseforge.com/projects/mechjeb/files/2355387/download'
>>> response = urlopen(url)
>>> response.url
'https://addons-origin.cursecdn.com/files/2355/387/MechJeb2-2.6.0.0.zip'

您可以使用os.path.basename获取文件名:

>>> from os.path import basename
>>> basename(response.url)
'MechJeb2-2.6.0.0.zip'
from urllib import request

url = 'file download link'
filename = request.urlopen(request.Request(url)).info().get_filename()