无法在NodeJS中下载页面

我想在NodeJS中下载页面( https://www.csfd.cz/tvurce/65871 ),但是我只能得到随机数据。

 }Ms F      +i"  ) Jْ; e   7 KM0  LƩ  ]  Yg  b   Ow7U  J # K 9  L 

我以为这只是错误的编码,但即使大小是错误的(下载页面有44K,而这个文件只有19K。更令人惊讶的是,简单的下载python的工程很好。
Python代码:

 import requests url = "https://www.csfd.cz/tvurce/65871" r = requests.get(url) with open('pyth.txt','wb') as handle: handle.write(r.content) 

JavaScript代码:

 const request = require('request-promise') const fs = require('fs') request('https://www.csfd.cz/tvurce/65871').then((html) => { fs.writeFileSync('output.html', html) }) 

我也尝试了像request.get等附加方法等,但仍然是相同的结果。 你能告诉我我做错了什么吗?

在请求模块中使用压缩选项,请参阅请求模块示例( https://github.com/request/request )。

您还需要followRedirect和followAllRedirect参数来自动遵循301和302redirect因为你的请求返回302:

  curl -X GET https://www.csfd.cz/tvurce/65871 --compressed -v -i Response : 302 <h1>Redirect</h1> <p><a href="https://www.csfd.cz/tvurce/65871-kit-harington/">Please click here to continue</a>.</p> 

另外用标准的writeFile函数replace你的writeFileSync

 const request = require('request') const fs = require('fs') request.get({ url:'https://www.csfd.cz/tvurce/65871', gzip: true, followRedirect: true, followAllRedirect: true }, function(err, response, body){ if(err || !response || response.statusCode != 200) { // error case, do stg } else { fs.writeFile('output.html', body, "utf8", function(err){ if(err) { // error do stg } else { // success } }); } }) 

我尝试了不同的东西,不同的选项和编码,一些parsing器,我没有得到它与requestrequest-promise 。 从文档中,我会说你没有做错什么。

我试了一个不同的模块, unirestnpm install unirest --save ),它开箱即用。

 const unirest = require('unirest'); const fs = require('fs'); var Request = unirest.get('https://www.csfd.cz/tvurce/65871') .end(function(res) { console.log(res.body); fs.writeFileSync('output.html', res.body) }); 

希望这是帮助。

阅读Content-Encoding标题。 这是最有可能的压缩,这将解释大小的差异。