使用浏览器下载 XML 是可以的,但不能使用 wget 之类的下载器

使用浏览器下载 XML 是可以的,但不能使用 wget 之类的下载器

链接是https://api.bilibili.com/x/v1/dm/list.so?oid=162677333。当我使用 wget 下载它时,我得到了一个二进制文件,我以为它会是 GZIP 或 deflate,这通常是 Web 请求的情况,但事实并非如此。

这是什么文件?

为了方便起见 - 因为有时我们手边没有 wget - 可以在此处找到该文件,文件名为unknownhttps://github.com/ggaarder/snippets/raw/master/unknown

答案1

它是 deflate、zlib 和 gzip 之间的某个东西。我不知道。但我现在可以解码它。

只需使用zlib来解压缩它,而inflateInit2(&strm, -MAX_WBITS)不是inflateInit(&strm)

答案2

您可以通过检查 HTTP 标头来检查文件类型。使用 wget 的 -S 选项

$ wget -S https://api.bilibili.com/x/v1/dm/list.so?oid=162677333
--2020-07-28 19:06:43--  https://api.bilibili.com/x/v1/dm/list.so?oid=162677333
Resolving api.bilibili.com (api.bilibili.com)... 148.153.34.154, 148.153.35.66
Connecting to api.bilibili.com (api.bilibili.com)|148.153.34.154|:443... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Date: Tue, 28 Jul 2020 18:05:29 GMT
  Content-Type: text/xml
  Transfer-Encoding: chunked
  Connection: keep-alive
  Bili-Trace-Id: 1a2ebdf95f2069
  Content-Encoding: deflate
  Last-Modified: Wed, 29 Jul 2020 02:06:45 GMT
  X-Robots-Tag: noindex
  Set-Cookie: bfe_id=f197415d50c3ae88d0c168156836d178; Path=/; Max-Age=600; Expires=Tue, 28-Jul-20 18:15:29 GMT
  Expires: Tue, 28 Jul 2020 18:05:28 GMT
  Cache-Control: no-cache
  X-Cache-Webcdn: BYPASS from cds-euwest-webcdn-02
Length: unspecified [text/xml]
Saving to: ‘list.so?oid=162677333’

注意两个标题

  Content-Type: text/xml
  Content-Encoding: deflate

因此使用以下方式编码的 XMLdeflate算法

相关内容