无法在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器,我没有得到它与request
和request-promise
。 从文档中,我会说你没有做错什么。
我试了一个不同的模块, unirest
( npm 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
标题。 这是最有可能的压缩,这将解释大小的差异。