无法在NodeJS中下载页面

时间:2017-08-08 14:37:26

标签: javascript node.js request

我想在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等等,但结果仍然相同。你能告诉我我做错了什么吗?

3 个答案:

答案 0 :(得分:1)

我尝试了不同的东西,不同的选项和编码,一些解析器,而且我没有让它与format("Y-m-d")echo $row->getDate()->format("Y-m-d"); 一起使用。从文档中,我会说你做错了什么。

我尝试了另一个模块,requestrequest-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标题。它最有可能被压缩,这可以解释尺寸差异。