如何将content-type:application/vnd.google.octet-stream-compressible数据转换为可读形式?

Uma*_*air 8 python google-maps web-scraping

我正在使用Python Scrapy抓取Google.

URL有一个AJAX,它的响应是content-type:application/vnd.google.octet-stream-compressible.我可以将其转换为可读形式吗?

这是cURL,你可以看到它的反应.

curl 'https://www.google.com/maps/vt/stream/pb=!1m7!8m6!1m3!1i17!2i38176!3i49635!2i7!3x16383!2m3!1e0!2sm!3i371050979!3m7!2sen!5e1105!12m4!1e68!2m2!1sset!2sRoadmap!4e1!6m6!1e12!2i2!28e3!39b1!44e2!50e0' -H 'Referer: https://www.google.com/maps/_/js/k=maps.m.en.MQjize_OSyY.O/m=npm,wte,vw/rt=j/d=1/ed=1/exm=/rs=ACT90oGsAb_R5Wfu0Yk-GEzceAGaUAdIbg' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36' --compressed
Run Code Online (Sandbox Code Playgroud)

Bop*_*reH 2

查看原始数据总是有用的,即使是二进制数据:

\n
$ hexdump -C $file\n00000000  58 48 52 31 00 00 69 8e  06 00 91 91 93 8a 8b 3d  |XHR1..i........=|\n00000010  31 99 83 78 18 98 89 9f  93 98 8b 9a b9 6e b2 91  |1..x.........n..|\n00000020  1d be 12 cb d5 dc 96 91  81 91 9b 9b 9b 96 d2 d3  |................|\n00000030  df c9 9b 9b 98 65 9b 9b  9b b8 93 98 9b 9b 9b 81  |.....e..........|\n[...]\n
Run Code Online (Sandbox Code Playgroud)\n

XHR1 是一个好的开始,并且可能是一个文件签名。搜索 XHR1 + 地图,让我看到这篇 2017 年关于逆向工程 Google 地图格式的博客文章。本节似乎相关:

\n
\n

集成到 Web 应用程序中的新版本仅再次使用二进制 Protobuf \xe2\x80\x94,即 \xe2\x80\x99 是 Web 应用程序中 Protobuf 的第二种形式。\n用单字节异或代替了 RC4,效率大大提高了。\n那个\xe2\x80\x99就是我们前面提到的通过 AJAX 发送的二进制数据,\n封装在纯粹的长度值容器格式中(签名) \n\xe2\x80\x9cXHR1\xe2\x80\x9d)。传输的数据与旧数据的含义基本相同(我编写了一个小脚本,主要将其渲染为 SVG 只是为了花时间,它可以工作,但对很多人来说几乎没有用,并且可能会吸引 C&D xe2\x80\x99s,所以这留给读者作为练习)。

\n
\n

签名后的接下来的四个字节是00 00 69 8e,它看起来确实像一个表示长度的 32 位整数。尝试将其转换为整数N,并读取消息的接下来的N个字节。如果它仍然看起来不像任何东西,则可能仍在使用异或“加密”。尝试将该字节字符串与 0-255 之间的所有数字进行异或,然后查看是否通过签名或文本内容弹出任何有用的内容。

\n

但请注意,上面的博客文章包含谷歌向尝试以这种方式废弃地图数据的人们发出的停止和终止信件的示例。

\n