链接是https://api.bilibili.com/x/v1/dm/list.so?oid=162677333。当我使用 wget 下载它时,我得到了一个二进制文件,我以为它会是 GZIP 或 deflate,这通常是 Web 请求的情况,但事实并非如此。
这是什么文件?
为了方便起见 - 因为有时我们手边没有 wget - 可以在此处找到该文件,文件名为unknown
:https://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
算法