私は小さなnodejsスクリプトを持っていると私は、zipファイルをダウンロードします:リクエストとnodejを使用してレスポンスヘッダに基づいてリクエストを再試行する方法は?
const fs = requrie("fs");
const request = require("requestretry");
export class FileFetcher {
public async fetchFile(url: string): Promise<string> {
const fileName = "./download.zip";
return new Promise<string>(resolve => {
request(url)
.pipe(fs.createWriteStream(fileName))
.on("close", function() {
resolve(fileName);
});
});
}
}
ファイルのみが、将来的に存在しているので、意志最も可能性が高いこととして、私は、request
のラッパーをrequestretry
ライブラリを使用しています最初のカップル時間失敗します。
しかし、私は変な振る舞いをする外部エンドポイントに適応する必要があります。期待される404 Not Found
の代わりに常に200 OK
を返します。
したがって、応答を確認する唯一の方法は、Content-Length
ヘッダーです。 Content-Length: 0
の場合、ファイルはありません。
requestretry
では、異なる再試行戦略があるようですが、それらはすべて、幸福なapiを想定しているようです。 request.RetryStrategies.HTTPOrNetworkError
。 200になると、再試行は行われず、空のzipファイルが "正常に"ダウンロードされます。
requestretry
を使用して固定されていないため、レスポンスヘッダーに基づいてリクエストを再試行する方法が不思議です。