-1

我正在尝试使用 fs.createWriteStream 函数下载图像。我可以下载图像,但它已损坏/损坏。我收到一条错误消息:“拒绝访问您无权访问此服务器上的“https:...””

我在 headless:false 模式下使用 puppeteer,我还将用户代理设置为:“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36” )

我调用下载文件的函数如下:

const https = require("https");
const http = require("http");
const fs = require ("fs");
const path = require("path");
const URL = require("url").URL;

function download (url, filepath,callback,){

    const userURL = new URL (url);
    const requestCaller = userURL.protocol === "http:" ? http : https;

    const filename = path.basename(url);
  
    const req = requestCaller.get(url, function(res){

         const fileStream = fs.createWriteStream(path.resolve(filepath,filename));
         res.pipe(fileStream);

            fileStream.on("error", function(err){
                console.log("Error writing to the stream.");
                console.log(err);
              });
            fileStream.on("close",function(){
                callback(filename);

            });

            fileStream.on("finish", function(){
                fileStream.close()
            });
        });
         req.on("error", function(err){
             console.log("Error downloading the file.");
             console.log(err);  
         });
         
     };

   module.exports.download = download;

我要下载的图片的 URL 是这样的:

https://www.vrisko.gr/logos/775165.jpg

似乎我被服务器阻止了,但除了设置用户代理和不在无头模式下运行 puppeteer 之外,我不知道还能做什么。有什么想法吗?

[编辑]

显然 CORS 政策存在问题。我检查了网络呼叫,看到以下内容:

推荐人政策:严格来源时跨来源 sec-fetch-site:无

而当我简单地从浏览器手动导航时,我得到了这个:

推荐人政策:unsafe-url sec-fetch-site: same-origin

非常感谢!

4

1 回答 1

0

我使用 npm 模块 cors 修复了我在 CORS 策略中的所有错误。使用“npm install cors”安装它并执行以下操作:

const cors = require('cors');
const app = express();
app.use(cors());
app.options('*', cors());
于 2021-03-14T13:33:54.237 回答