我如何知道如何命名使用 HTTP 下载的文件?

How do I know what to name a file downloaded using HTTP?

我正在 Python 中创建一个 HTTP 客户端下载器。我能够正确下载 http://www.google.com/images/srpr/logo11w.png 之类的文件就好了。但是,我不确定实际上 name 是什么东西。

URL 末尾当然有文件名,但这总是可靠的吗?

如果我没记错的话,wget 使用以下启发式:

  1. 如果 Content-Disposition header 存在,从那里获取文件名。
  2. 如果 URL 的文件名部分存在(例如 http://myserver/filename),则使用它。
  3. 如果没有文件名部分(例如 http://www.google.com),从 Content-Type header 派生文件名(例如 index.htmltext/html
  4. 在所有情况下,如果此文件名已存在于目录中,请使用数字后缀,例如 index (1).html,或覆盖,具体取决于配置。

还有许多其他标志可以控制其他启发式算法,例如为 ASP/DHTML content-types.

创建 .html

简而言之,这真的取决于你想走多远。对于大多数人来说,做前两个+基本的Content-Type->name mapping应该就够了。