javascript - 从 nodeJs 请求 font Awesome 文件发送回错误的数据/文件

标签 javascript node.js curl httprequest font-awesome

我的应用程序:当您从浏览器向我的 Node 服务器发送请求时,我的 Node 服务器将请求原始网站,下载其所有静态文件(包括代码)并将它们返回给用户。下次您访问我的 Node 服务器时,它将服务器从 Node 返回的所有内容,而不是请求源。

当我从 Node 请求 Font Awesome 文件时

http://example.com/modules/megamenu/fonts/fontawesome-webfont.woff?v=4.2.0

该文件的内容与我使用 cUrl 请求相同 URL 时的内容不同。

当我将文件从 Node 返回到浏览器时,这会导致浏览器中出现此错误:

Failed to decode downloaded font: http://nodeDomain.test/modules/megamenu/fonts/fontawesome-webfont.woff?v=4.2.0

如果我将通过curl请求的文件中的内容复制并粘贴到存储在我的 Node 服务器上的文件中,错误就会消失并且所有很棒的字体都可以工作。

以下是我随请求一起从 Node 发送到源服务器的 header 。

{ 
connection: 'keep-alive',
pragma: 'no-cache',
'cache-control': 'no-cache',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36',
accept: '*/*',
referer: 'http://example.com/modules/megamenu/css/font-awesome.min.css',
'accept-language': 'en-US,en;q=0.8',
cookie: 'PrestaShop-a30a9934ef476d11b.....' 

}

我尝试查看从命令行执行curl 请求时发送的 header ,但我不知道如何执行此操作。

______用于获取文件的 Node 代码_______

Url: in options is the one stated above
headers: are the browsers request headers

var options = {
url: originRequestPath,
headers: requestHeaders
}

var originPage = rquest(options);
var responseBody = '';
var resHeads = '';

originPage.on('response', function(res)
{
   //store response headers locally
}

originPage.on('data', function(chunk) 
{       
    responseBody += chunk;
});                                                                               

originPage.on('end', function() 
{
    storeData.storePageData(storeFilePath, responseBody);
}); 

__________Store Function below________________

exp.storePageData = function(storePath, pageContent)
{
  fs.outputFile(storePath, pageContent, function(err) {
        if(err){ console.log(err)}
  });

}

最佳答案

我相信您的代码的问题是您正在将缓冲区输出转换为 utf8 字符串。由于您要添加带有空字符串 responseBody += chunk; 的缓冲区,该缓冲区将转换为 utf-8 字符串。因此,您将丢失一些二进制文件的数据。试试这个方法:

var originPage = rquest(options);
var chunks = []

originPage.on('response', function(res)
{
   //store response headers locally
}

originPage.on('data', function(chunk) 
{       
    chunks.push(chunk)
});                                                                               

originPage.on('end', function() 
{       
     var data = Buffer.concat(chunks)
    //send data to browser and store content locally
}); 

关于javascript - 从 nodeJs 请求 font Awesome 文件发送回错误的数据/文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31318701/

相关文章:

node.js - 在AnswerIntentHandler中运行exports.handle - node.js - Alexa技能

javascript - 访问 JavaScript 对象键和值

http - 使用 HTTP PUT 方法测试文件上传

php - 无需登录表单即可登录 phpmyadmin

javascript - 我如何根据下拉值禁用/启用表单

javascript - 检查单选按钮选择是否针对 2 个提交按钮

javascript - 如何在reactjs中清除浏览器缓存

javascript - 无法在渲染器进程中使用 Node.js API

javascript - 使用 Node.js 使用 RabbitMQ 消息时,我可以等待进程完成吗?

unix - 我如何区分网络上的两个文件