1

node.jsでBingの今日の壁紙をダウンロードしたいのですが、

まず第一に、私は他のいくつかのサイトから大きな写真をダウンロードすることができます

しかし、ブラウザで写真を見ることができても、Bingから写真をダウンロードできません。

画像のsrcの例は次のとおりです: "http://www.bing.com/az/hprichbg?p=rb%2fYosemiteSnow_EN-US7191433727_1920x1200.jpg"

これが私のコアコードです

var download_file_httpget = function(file_url) {
    var options = {
        host: url.parse(file_url).host,
        port: 80,
        path: url.parse(file_url).pathname,
        headers: {}
    };
    var file_name = '11.jpg';
    var file = fs.createWriteStream(download_path + "\\" + file_name);
    http.get(options,function(res) {
        res.on('data',function(data) {
            file.write(data);
        }).on('end',function() {
            file.end();
            console.log('download success');
        });
    });
};

たとえば、元の写真のサイズは200kですが、ダウンロードできるのは20kだけであり、ヘッダーの「リファラー」が原因であるとは思えません。ヘッダーを追加すると、一部のサイトで問題が修正されましたが、それでも問題は解決しました。ビンビンには効かない

4

1 に答える 1

1

に切り替える

path: url.parse(file_url).path,

クエリ文字列が含まれ、ファイル全体が取得されます。

ダウンロードされるファイルは、jpegではなくHTMLテキストファイルです。

console.log(url.parse(file_url));

これを示しています:

{
    protocol: 'http:',
    slashes: true,
    host: 'www.bing.com',
    hostname: 'www.bing.com',
    href: 'http://www.bing.com/az/hprichbg?p=rb%2fYosemiteSnow_EN-US7191433727_1920x1200.jpg',
    search: '?p=rb%2fYosemiteSnow_EN-US7191433727_1920x1200.jpg',
    query: 'p=rb%2fYosemiteSnow_EN-US7191433727_1920x1200.jpg',
    pathname: '/az/hprichbg',
    path: '/az/hprichbg?p=rb%2fYosemiteSnow_EN-US7191433727_1920x1200.jpg'
}

を使用しているpathnameため、URLは次のとおりです。

http://www.bing.com/az/hprichbg

そのため、Bingはどの画像を返すかを知りません。

于 2012-12-01T16:13:32.837 に答える