如何从不明确的url中获取文件名



这里有点问题,我找不到详细的文档来解决这个问题。我知道如何从URL中获取文件名,如果URL看起来像这样,例如:

https://preview.redd.it/award_images/t5_q0gj4/ks45ij6w05f61_oldHugz.png

但我的问题是,如果URL不明确并且没有嵌入路径,如何获取文件名,例如:

https://codeload.github.com/ecthros/uncaptcha2/zip/master

我所知道的几乎每一个方法都会返回"master"作为文件名,而实际的文件名是"uncaptcha2master.zip"。随着URL的复杂性,这个问题会变得更糟。显然,我可以下载文件并获得这样的文件名,但问题是我有几千个URL,获得这样的名称意味着我将不得不永远等待,并愿意使用我所有的带宽和存储来这样做,所以在我的情况下,这不是一个可行的选择。

如果有人对如何克服这个问题有任何想法,请让我知道

当您访问的url不是像https://codeload.github.com/ecthros/uncaptcha2/zip/master这样的文件时,服务器会处理请求并根据请求返回文件url。因此,你不能仅仅猜测进程算法,除非你通过泛化找到进程的逻辑,否则你无法捕捉文件名。但在大多数情况下,您无法根据端点检索文件名。

您可以使用模块cgi解析响应http标头中的文件名,然后获取参数filename,此代码返回'uncaptcha2-master.zip'

import requests
import cgi
URL = 'https://codeload.github.com/ecthros/uncaptcha2/zip/master'
response = requests.get(URL)
header = response.headers.get('Content-Disposition', '')
_, params = cgi.parse_header(header)
filename = params['filename']
# uncaptcha2-master.zip
print(filename)

关于参数文件名:

后面跟一个字符串,包含传输文件的原始名称。文件名始终是可选的,应用程序不能盲目使用:应该删除路径信息,并转换为服务器文件系统规则。该参数主要提供指示性信息

您可以在此处获得有关此参数和内容处置响应标头的更多信息

相关内容

  • 没有找到相关文章

最新更新