gpt4 book ai didi

javascript - HTTP 请求直到 header 有附件

转载 作者:行者123 更新时间:2023-12-03 05:48:17 26 4
gpt4 key购买 nike

我们有一个 Web 应用程序,在访问 URL 时,它将准备并生成一个 .zip 文件,然后下载该文件。

我需要使用 requestjs 创建一个 NodeJS 应用程序,该应用程序可以不断发出请求,直到出现附件 header ,然后从该点下载附件 header 。

生成 .zip 文件的页面包含一条简单的 html 消息,表明该文件正在准备下载。使用加载时调用的 javascript reload(true) 函数。

我不确定这是否是正确的做法,但我愿意接受建议。

最佳答案

您可以使用async.until循环执行一些逻辑,直到 header 可用:

let success = true;
async.until(
// Do this as a test for each iteration
function() {
return success == true;
},
// Function to loop through
function(callback) {
request(..., function(err, response, body) {
// Header test
if(resonse.headers['Content-Disposition'] == 'attatchment;filename=...') {
response.pipe(fs.createWriteStream('./filename.zip'));
success = true;
}
// If you want to set a timeout delay
// setTimeout(function() { callback(null) }, 3000);
callback(null);
});
},
// Success!
function(err) {
// Do anything after it's done
}
)

您可以使用 setInterval 等其他方式来完成此操作,但我会选择使用 async 来实现友好的异步功能。

编辑:这是使用setTimeout的另一个示例(我不喜欢setInterval的初始延迟。

let request = require('request');

let check_loop = () => {
request('http://url-here.tld', (err, response, body) => {
// Edit line below to look for specific header and value
if(response.headers['{{HEADER_NAME_HERE}}'] == '{{EXPECTED_HEADER_VAL}}')
{
response.pipe(fs.createWriteStream('./filename.zip')); // write file to ./filename.zip
}
else
{
// Not ready yet, try again in 30s
setTimeout(check_loop, 30 * 1000);
}
});
};

check_loop();

关于javascript - HTTP 请求直到 header 有附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40245327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com