我在 nodejs 和 php 上编写了一个脚本,它实现了相同的功能:ping API、检索文件列表、循环遍历每个文件并将它们下载到磁盘上的指定位置。
左边是nodejs,右边是php。
我观察到,在 Nodejs 中每次尝试时,某些文件都会随机失败。经过某种尝试后,所有文件也会成功。在 php 上,每次尝试都是一致的,并且所有文件都可以正常下载。
Nodejs 中是否缺少某些内容,即默认情况下通过下载文件的请求未包含配置/标头?或者下载多个文件需要在nodejs中以不同的方式处理吗?
Nodejs代码:
const http = require('https');
const fs = require('fs');
function getResponse(url, callback) {
http.get(url, response => {
let body = '';
response.on('data', data => {
body += data
})
response.on('end', () => {
callback(JSON.parse(body))
})
})
}
var download = function (url, dest, callback) {
http.get(url, response => {
response.on('error', function (err) {
console.log(err)
})
.pipe(fs.createWriteStream(dest))
.on('close', callback)
});
};
getResponse('https://wallhaven.cc/api/v1/search?page=1', json => {
json.data.forEach((item, index) => {
download(item.path, `files/file-${index}.jpg`, function () {
console.log('Finished Downloading' + `file-${index}.jpg`)
});
})
})
PHP代码
$client = new \GuzzleHttp\Client();
$response = $client->get('https://wallhaven.cc/api/v1/search?page=1');
$json = json_decode((string)$response->getBody());
$rows = $json->data;
foreach ($rows as $index => $row) {
$content = file_get_contents($row->path);
Storage::put("files/file-$index.jpg", $content);
}
return 'done';
慕无忌1623718