目标
在Node.js环境下,想完成一个通过url将对应图片下载到服务器的功能,思路就是用http.request对url发起请求,将请求到的图片文件存到服务器某个目录下。
问题
但是在对百度图片上的一个图片url进行请求时,即使我设置了各种请求头,依然怎么都没法请求到正确的文件,总是返回一个内容写着forbidden的html文件。
新问题
刚发现下面那个链接在别的电脑上打开就是403
。然而!很神奇!我自己的电脑清除缓存,更换浏览器都依然能打开!这是为何!?而且可以排除ip的因素,因为我同一部电脑,在家里和公司两个地方都能打开! (╯‵□′)╯︵┻━┻
图片链接是:http://img1.imgtn.bdimg.com/i...
(图片有点土鳖,随手选的)
附上浏览器请求信息
代码
图片链接是:http://img1.imgtn.bdimg.com/i...
(图片有点土鳖,随手选的)
我的请求代码:
// 请求图片地址
let imgRequest = http.request(requestOption,(resImg) => {
let imgData = "";
resImg.setEncoding("binary");
resImg.on("data",function(chunk) {
imgData += chunk;
});
resImg.on("end",function(){
console.log('end');
fs.writeFile(filePathName,imgData,"binary",function(err){
if(err){
//图片写入失败
res.status(500).send({error:'Can\'t download image by URL: '+imgURL});
console.log("down fail");
}else{
res.send('Dowload suceess!');
}
})
})
});
imgRequest.on("error",function(e){
//图片下载失败
res.status(500).send({error:'Can’t download image by URL: '+imgURL});
console.log(e);
});
imgRequest.end();
我的请求配置内容:
let requestOption = {
method: 'get',
hostname: "img1.imgtn.bdimg.com",
port: 80,
path: "/it/u=1794894692,1423685501&fm=23&gp=0.jpg",
timeout: 5000,
header: {
"Upgrade-Insecure-Requests": 1,
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, sdch",
"Accept-Language": "zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4",
"Referer" : "http://img1.imgtn.bdimg.com/it/u=1794894692,1423685501&fm=23&gp=0.jpg",
"Host": "img1.imgtn.bdimg.com"
}
};
下载下来的文件内容
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>JSP3/2.0.14</center>
</body>
</html>
求指教
求大神指教,出现这种问题的原因是啥?有办法解决吗?
header 正确拼写 headers