我想在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
等等,但结果仍然相同。你能告诉我我做错了什么吗?
答案 0 :(得分:1)
我尝试了不同的东西,不同的选项和编码,一些解析器,而且我没有让它与format("Y-m-d")
和echo $row->getDate()->format("Y-m-d");
一起使用。从文档中,我会说你做错了什么。
我尝试了另一个模块,request
(request-promise
),它开箱即用。
unirest
希望这有帮助。
答案 1 :(得分:1)
在请求模块中使用压缩选项,请参阅请求模块(https://github.com/request/request)的示例。
您还需要followRedirect和followAllRedirect参数自动跟随301和302重定向,因为您的请求正在返回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函数替换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
}
});
}
})
答案 2 :(得分:0)
阅读Content-Encoding
标题。它最有可能被压缩,这可以解释尺寸差异。