File tree Expand file tree Collapse file tree 1 file changed +24
-0
lines changed Expand file tree Collapse file tree 1 file changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -6,15 +6,20 @@ const logger = {
6
6
7
7
const MAX_RETRY = 25 ;
8
8
const MAX_RETRY_DELAY = 5000 ;
9
+ const MAX_RETRY_AFTER = 60000 ;
9
10
/**
10
11
* @type {Partial<DownloaderOptions> }
11
12
*/
12
13
const defaultOptions = {
13
14
req : {
14
15
maxRedirects : 15 ,
16
+ // RequestError: Cookie has domain set to a public suffix
17
+ // https://developer.mozilla.org/zh-CN/docs/Mozilla/QA/Marionette/Client
18
+ ignoreInvalidCookies : true ,
15
19
retry : {
16
20
decompress : true ,
17
21
limit : MAX_RETRY ,
22
+ maxRetryAfter : MAX_RETRY_AFTER ,
18
23
/**
19
24
* if you would like to implement it yourself,
20
25
* set error.retryLimitExceeded to 1 or true if
@@ -55,6 +60,25 @@ const defaultOptions = {
55
60
error . response && error . response . statusCode === 429 ) {
56
61
// add random delay
57
62
delay += 3000 + Math . random ( ) * 3000 ;
63
+ if ( error . response . headers &&
64
+ error . response . headers [ 'retry-after' ] ) {
65
+ let retryAfter = parseInt ( error . response . headers [ 'retry-after' ] ) ;
66
+ if ( Number . isNaN ( retryAfter ) ) {
67
+ retryAfter = Date . parse ( error . response . headers [ 'retry-after' ] ) - Date . now ( ) ;
68
+ } else {
69
+ retryAfter *= 1000 ;
70
+ }
71
+ if ( ! isNaN ( retryAfter ) ) {
72
+ retryAfter |= 0 ;
73
+ if ( retryOptions . maxRetryAfter ) {
74
+ if ( retryAfter <= retryOptions . maxRetryAfter ) {
75
+ delay = retryAfter ;
76
+ }
77
+ } else {
78
+ delay = retryAfter ;
79
+ }
80
+ }
81
+ }
58
82
}
59
83
delay |= 0 ;
60
84
return delay ;
You can’t perform that action at this time.
0 commit comments