Splash脚本检索站点返回错误的主体

我正在使用Splash检索多个不同的URL。我正在向/execute端点发布一个脚本,看起来像这样:

local request_headers= {
  ["Accept-Encoding"]           = "gzip, deflate, br",
  ["Accept-Language"]           = "en-US,en;q=0.5",
  ["Cache-Control"]             = "max-age=0",
  ["Upgrade-Insecure_Requests"] = "1",
  ["Accept"]                    = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
  ["User-Agent"] = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36",
  ["DNT"] = "1",
  ["Host"] = "www.douban.com"
}
splash:go({
  url="https://www.douban.com/people/sophiechou/",
  headers = request_headers
})

return { ok=true, html=splash:html(), info=splash:har() }

必须将哈希返回到Splash服务器和最终目的地之间接收到的真实标题。

问题在于我收到的HTML很可能是Gzip压缩的。据我从Splash了解,当我返回哈希时,它会自动JSON编码它...这使得JSON编码二进制gzip,从而把它都变成垃圾。

有时,网站会返回HTML。有时,他们会返回Gzip或Defalte或BR。

为什么我不只是使用"identity"?我们发现许多网站对身份不做出响应,或者会返回禁止。更改编码既降低了我们浏览器足迹的独特性,也减少了随机问题的数量。

除了我们不能读取页面。

看起来我们需要检测,如果有二进制,通过某种treat.as_binary(x)来处理,或者什么......但是文档在如何做到这一点方面变得非常简略。

这让我困扰了几个星期。帮帮我!任何想法吗?

附加说明:链接到通过Splash Jupyter笔记本返回的HTML的样子。 [链接] (https://www.evernote.com/l/AAHBqNSmnapP5Ks9rD3n9m4Ejy9BSqBIeCE)

点赞