我正在尝试从 wikimedia 获取图片,图片的链接是
upload.wikimedia.org/wikipedia/commons/thumb/e/e3/AybükeArslan_(3).JPG/220px-AybükeArslan_(3).JPG
但是当我尝试使用 node.js 来获取图片时,维基媒体服务器会将错误声明作为回复。但是在浏览器上,URL工作正常,并将图像作为响应。
这是错误陈述
400错误请求服务器因此无法满足请求 是畸形的还是其他不正确的。无法解码请求
代码是
var http = require('https')
, fs = require('fs')
, options
options = {
host: 'upload.wikimedia.org'
, port: 443
, path: '/wikipedia/commons/thumb/e/e3/AybükeArslan_(3).JPG/220px-AybükeArslan_(3).JPG'
}
var request = http.get(options, function(res){
var imagedata = ''
res.setEncoding('binary')
res.on('data', function(chunk){
imagedata += chunk
})
res.on('end', function(){
console.log(imagedata);
})
//trying to store the response as a jpg image which i am failing miserably because the response is a error statement rather than image stream.
res.on('end', function(){
fs.writeFile('image.jpg', imagedata, 'binary', function(err){
if (err) throw err
console.log('File saved.')
})
})
})
有人可以帮忙吗?坚持了很久。
答案 0 :(得分:0)
因为你在url中有未编码的字符串。使用encodeURI
<强>已更新强>
var http = require('https')
, fs = require('fs')
, options;
options = {
hostname: 'upload.wikimedia.org'
, port: 443
, path: encodeURI('/wikipedia/commons/thumb/e/e3/AybükeArslan_(3).JPG/220px-AybükeArslan_(3).JPG')
};
var request = http.get(options, function(res){
var imagedata = '';
res.setEncoding('binary');
res.on('data', function(chunk){
imagedata += chunk
});
res.on('end', function(){
console.log(imagedata);
});
//trying to store the response as a jpg image which i am failing miserably because the response is a error statement rather than image stream.
res.on('end', function(){
fs.writeFile('image.jpg', imagedata, 'binary', function(err){
if (err) throw err;
console.log('File saved.');
});
})
});
答案 1 :(得分:0)
我问了一个单独的问题来找到答案,隐藏字符存在一些问题,这些问题在崇高中是不可见的,这会导致错误,在问题中我提到的代码是完全正确的,有关详细信息,请参阅下面的答案< / p>