我正在尝试使用 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
非常感谢!