advplyr / audiobookshelf

Self-hosted audiobook and podcast server
https://audiobookshelf.org
GNU General Public License v3.0
6.74k stars 474 forks source link

[Bug]: Download of specific Podcast RSS Feed fails #3611

Open sledge1977 opened 1 day ago

sledge1977 commented 1 day ago

What happened?

I'm trying to update a specific feed in Audiobookshelf. In the Logs I can see that ABS is trying to download the feed but gives an AXIOS Error. I tried manually and automatic downloads - both the same results. The same feed seems to work on Pocket Casts. Downloading the feed manually using a browser also works.

What did you expect to happen?

The feed should be updated, new episodes should be downloaded.

Steps to reproduce the issue

  1. Add the Podcast feed: https://latenightlinux.com/feed/all
  2. Try to download the latest episodes
  3. Wait and watch the logs

Audiobookshelf version

v2.16.2

How are you running audiobookshelf?

Docker

What OS is your Audiobookshelf server hosted from?

Linux

If the issue is being seen in the UI, what browsers are you seeing the problem on?

None

Logs

audiobookshelf-1  | [2024-11-13 15:37:39.990] INFO: [PodcastManager] checkAndDownloadNewEpisodes for "Late Night Linux Family All Episodes" - Last episode check: Sun Sep 01 2024 15:31:00 GMT+0200 (Central European Summer Time)
audiobookshelf-1  | [2024-11-13 15:38:15.331] ERROR: [podcastUtils] getPodcastFeed Error [AxiosError: maxContentLength size of -1 exceeded] {
audiobookshelf-1  |   code: 'ERR_BAD_RESPONSE',
audiobookshelf-1  |   config: {
audiobookshelf-1  |     transitional: {
audiobookshelf-1  |       silentJSONParsing: true,
audiobookshelf-1  |       forcedJSONParsing: true,
audiobookshelf-1  |       clarifyTimeoutError: false
audiobookshelf-1  |     },
audiobookshelf-1  |     adapter: [Function: httpAdapter],
audiobookshelf-1  |     transformRequest: [ [Function: transformRequest] ],
audiobookshelf-1  |     transformResponse: [ [Function: transformResponse] ],
audiobookshelf-1  |     timeout: 12000,
audiobookshelf-1  |     xsrfCookieName: 'XSRF-TOKEN',
audiobookshelf-1  |     xsrfHeaderName: 'X-XSRF-TOKEN',
audiobookshelf-1  |     maxContentLength: -1,
audiobookshelf-1  |     maxBodyLength: -1,
audiobookshelf-1  |     env: { FormData: [Function] },
audiobookshelf-1  |     validateStatus: [Function: validateStatus],
audiobookshelf-1  |     headers: {
audiobookshelf-1  |       Accept: 'application/rss+xml, application/xhtml+xml, application/xml, */*;q=0.8',
audiobookshelf-1  |       'User-Agent': 'audiobookshelf (+https://audiobookshelf.org; like iTMS)'
audiobookshelf-1  |     },
audiobookshelf-1  |     url: 'https://latenightlinux.com/feed/all',
audiobookshelf-1  |     method: 'get',
audiobookshelf-1  |     responseType: 'arraybuffer',
audiobookshelf-1  |     httpAgent: Agent {
audiobookshelf-1  |       _events: [Object: null prototype],
audiobookshelf-1  |       _eventsCount: 2,
audiobookshelf-1  |       _maxListeners: undefined,
audiobookshelf-1  |       defaultPort: 443,
audiobookshelf-1  |       protocol: 'https:',
audiobookshelf-1  |       options: [Object: null prototype],
audiobookshelf-1  |       requests: [Object: null prototype] {},
audiobookshelf-1  |       sockets: [Object: null prototype] {},
audiobookshelf-1  |       freeSockets: [Object: null prototype] {},
audiobookshelf-1  |       keepAliveMsecs: 1000,
audiobookshelf-1  |       keepAlive: false,
audiobookshelf-1  |       maxSockets: Infinity,
audiobookshelf-1  |       maxFreeSockets: 256,
audiobookshelf-1  |       scheduling: 'lifo',
audiobookshelf-1  |       maxTotalSockets: Infinity,
audiobookshelf-1  |       totalSocketCount: 0,
audiobookshelf-1  |       maxCachedSessions: 100,
audiobookshelf-1  |       _sessionCache: [Object],
audiobookshelf-1  |       createConnection: [Function (anonymous)],
audiobookshelf-1  |       [Symbol(shapeMode)]: false,
audiobookshelf-1  |       [Symbol(kCapture)]: false,
audiobookshelf-1  |       [Symbol(active)]: true
audiobookshelf-1  |     },
audiobookshelf-1  |     httpsAgent: Agent {
audiobookshelf-1  |       _events: [Object: null prototype],
audiobookshelf-1  |       _eventsCount: 2,
audiobookshelf-1  |       _maxListeners: undefined,
audiobookshelf-1  |       defaultPort: 443,
audiobookshelf-1  |       protocol: 'https:',
audiobookshelf-1  |       options: [Object: null prototype],
audiobookshelf-1  |       requests: [Object: null prototype] {},
audiobookshelf-1  |       sockets: [Object: null prototype] {},
audiobookshelf-1  |       freeSockets: [Object: null prototype] {},
audiobookshelf-1  |       keepAliveMsecs: 1000,
audiobookshelf-1  |       keepAlive: false,
audiobookshelf-1  |       maxSockets: Infinity,
audiobookshelf-1  |       maxFreeSockets: 256,
audiobookshelf-1  |       scheduling: 'lifo',
audiobookshelf-1  |       maxTotalSockets: Infinity,
audiobookshelf-1  |       totalSocketCount: 0,
audiobookshelf-1  |       maxCachedSessions: 100,
audiobookshelf-1  |       _sessionCache: [Object],
audiobookshelf-1  |       createConnection: [Function (anonymous)],
audiobookshelf-1  |       [Symbol(shapeMode)]: false,
audiobookshelf-1  |       [Symbol(kCapture)]: false,
audiobookshelf-1  |       [Symbol(active)]: true
audiobookshelf-1  |     },
audiobookshelf-1  |     data: undefined
audiobookshelf-1  |   },
audiobookshelf-1  |   request: <ref *1> ClientRequest {
audiobookshelf-1  |     _events: [Object: null prototype] {
audiobookshelf-1  |       abort: [Function (anonymous)],
audiobookshelf-1  |       aborted: [Function (anonymous)],
audiobookshelf-1  |       connect: [Function (anonymous)],
audiobookshelf-1  |       error: [Function (anonymous)],
audiobookshelf-1  |       socket: [Function (anonymous)],
audiobookshelf-1  |       timeout: [Function (anonymous)],
audiobookshelf-1  |       finish: [Function: requestOnFinish]
audiobookshelf-1  |     },
audiobookshelf-1  |     _eventsCount: 7,
audiobookshelf-1  |     _maxListeners: undefined,
audiobookshelf-1  |     outputData: [],
audiobookshelf-1  |     outputSize: 0,
audiobookshelf-1  |     writable: true,
audiobookshelf-1  |     destroyed: true,
audiobookshelf-1  |     _last: true,
audiobookshelf-1  |     chunkedEncoding: false,
audiobookshelf-1  |     shouldKeepAlive: false,
audiobookshelf-1  |     maxRequestsOnConnectionReached: false,
audiobookshelf-1  |     _defaultKeepAlive: true,
audiobookshelf-1  |     useChunkedEncodingByDefault: false,
audiobookshelf-1  |     sendDate: false,
audiobookshelf-1  |     _removedConnection: false,
audiobookshelf-1  |     _removedContLen: false,
audiobookshelf-1  |     _removedTE: false,
audiobookshelf-1  |     strictContentLength: false,
audiobookshelf-1  |     _contentLength: 0,
audiobookshelf-1  |     _hasBody: true,
audiobookshelf-1  |     _trailer: '',
audiobookshelf-1  |     finished: true,
audiobookshelf-1  |     _headerSent: true,
audiobookshelf-1  |     _closed: true,
audiobookshelf-1  |     socket: TLSSocket {
audiobookshelf-1  |       _tlsOptions: [Object],
audiobookshelf-1  |       _secureEstablished: true,
audiobookshelf-1  |       _securePending: false,
audiobookshelf-1  |       _newSessionPending: false,
audiobookshelf-1  |       _controlReleased: true,
audiobookshelf-1  |       secureConnecting: false,
audiobookshelf-1  |       _SNICallback: null,
audiobookshelf-1  |       servername: 'latenightlinux.com',
audiobookshelf-1  |       alpnProtocol: false,
audiobookshelf-1  |       authorized: true,
audiobookshelf-1  |       authorizationError: null,
audiobookshelf-1  |       encrypted: true,
audiobookshelf-1  |       _events: [Object: null prototype],
audiobookshelf-1  |       _eventsCount: 12,
audiobookshelf-1  |       connecting: false,
audiobookshelf-1  |       _hadError: false,
audiobookshelf-1  |       _parent: null,
audiobookshelf-1  |       _host: 'latenightlinux.com',
audiobookshelf-1  |       _closeAfterHandlingError: false,
audiobookshelf-1  |       _readableState: [ReadableState],
audiobookshelf-1  |       _writableState: [WritableState],
audiobookshelf-1  |       allowHalfOpen: false,
audiobookshelf-1  |       _maxListeners: undefined,
audiobookshelf-1  |       _sockname: null,
audiobookshelf-1  |       _pendingData: null,
audiobookshelf-1  |       _pendingEncoding: '',
audiobookshelf-1  |       server: undefined,
audiobookshelf-1  |       _server: null,
audiobookshelf-1  |       ssl: null,
audiobookshelf-1  |       _requestCert: true,
audiobookshelf-1  |       _rejectUnauthorized: true,
audiobookshelf-1  |       parser: null,
audiobookshelf-1  |       _httpMessage: [Circular *1],
audiobookshelf-1  |       timeout: 12000,
audiobookshelf-1  |       write: [Function: writeAfterFIN],
audiobookshelf-1  |       [Symbol(alpncallback)]: null,
audiobookshelf-1  |       [Symbol(res)]: null,
audiobookshelf-1  |       [Symbol(verified)]: true,
audiobookshelf-1  |       [Symbol(pendingSession)]: null,
audiobookshelf-1  |       [Symbol(async_id_symbol)]: 1200497,
audiobookshelf-1  |       [Symbol(kHandle)]: null,
audiobookshelf-1  |       [Symbol(lastWriteQueueSize)]: 0,
audiobookshelf-1  |       [Symbol(timeout)]: Timeout {
audiobookshelf-1  |         _idleTimeout: -1,
audiobookshelf-1  |         _idlePrev: null,
audiobookshelf-1  |         _idleNext: null,
audiobookshelf-1  |         _idleStart: 330748219,
audiobookshelf-1  |         _onTimeout: null,
audiobookshelf-1  |         _timerArgs: undefined,
audiobookshelf-1  |         _repeat: null,
audiobookshelf-1  |         _destroyed: true,
audiobookshelf-1  |         [Symbol(refed)]: false,
audiobookshelf-1  |         [Symbol(kHasPrimitive)]: false,
audiobookshelf-1  |         [Symbol(asyncId)]: 1200505,
audiobookshelf-1  |         [Symbol(triggerId)]: 1200500
audiobookshelf-1  |       },
audiobookshelf-1  |       [Symbol(kBuffer)]: null,
audiobookshelf-1  |       [Symbol(kBufferCb)]: null,
audiobookshelf-1  |       [Symbol(kBufferGen)]: null,
audiobookshelf-1  |       [Symbol(shapeMode)]: true,
audiobookshelf-1  |       [Symbol(kCapture)]: false,
audiobookshelf-1  |       [Symbol(kSetNoDelay)]: false,
audiobookshelf-1  |       [Symbol(kSetKeepAlive)]: true,
audiobookshelf-1  |       [Symbol(kSetKeepAliveInitialDelay)]: 60,
audiobookshelf-1  |       [Symbol(kBytesRead)]: 590715,
audiobookshelf-1  |       [Symbol(kBytesWritten)]: 220,
audiobookshelf-1  |       [Symbol(connect-options)]: [Object]
audiobookshelf-1  |     },
audiobookshelf-1  |     _header: 'GET /feed/all HTTP/1.1\r\n' +
audiobookshelf-1  |       'Accept: application/rss+xml, application/xhtml+xml, application/xml, */*;q=0.8\r\n' +
audiobookshelf-1  |       'User-Agent: audiobookshelf (+https://audiobookshelf.org; like iTMS)\r\n' +
audiobookshelf-1  |       'Host: latenightlinux.com\r\n' +
audiobookshelf-1  |       'Connection: close\r\n' +
audiobookshelf-1  |       '\r\n',
audiobookshelf-1  |     _keepAliveTimeout: 0,
audiobookshelf-1  |     _onPendingData: [Function: nop],
audiobookshelf-1  |     agent: Agent {
audiobookshelf-1  |       _events: [Object: null prototype],
audiobookshelf-1  |       _eventsCount: 2,
audiobookshelf-1  |       _maxListeners: undefined,
audiobookshelf-1  |       defaultPort: 443,
audiobookshelf-1  |       protocol: 'https:',
audiobookshelf-1  |       options: [Object: null prototype],
audiobookshelf-1  |       requests: [Object: null prototype] {},
audiobookshelf-1  |       sockets: [Object: null prototype] {},
audiobookshelf-1  |       freeSockets: [Object: null prototype] {},
audiobookshelf-1  |       keepAliveMsecs: 1000,
audiobookshelf-1  |       keepAlive: false,
audiobookshelf-1  |       maxSockets: Infinity,
audiobookshelf-1  |       maxFreeSockets: 256,
audiobookshelf-1  |       scheduling: 'lifo',
audiobookshelf-1  |       maxTotalSockets: Infinity,
audiobookshelf-1  |       totalSocketCount: 0,
audiobookshelf-1  |       maxCachedSessions: 100,
audiobookshelf-1  |       _sessionCache: [Object],
audiobookshelf-1  |       createConnection: [Function (anonymous)],
audiobookshelf-1  |       [Symbol(shapeMode)]: false,
audiobookshelf-1  |       [Symbol(kCapture)]: false,
audiobookshelf-1  |       [Symbol(active)]: true
audiobookshelf-1  |     },
audiobookshelf-1  |     socketPath: undefined,
audiobookshelf-1  |     method: 'GET',
audiobookshelf-1  |     maxHeaderSize: undefined,
audiobookshelf-1  |     insecureHTTPParser: undefined,
audiobookshelf-1  |     joinDuplicateHeaders: undefined,
audiobookshelf-1  |     path: '/feed/all',
audiobookshelf-1  |     _ended: false,
audiobookshelf-1  |     res: IncomingMessage {
audiobookshelf-1  |       _events: [Object],
audiobookshelf-1  |       _readableState: [ReadableState],
audiobookshelf-1  |       _maxListeners: undefined,
audiobookshelf-1  |       socket: [TLSSocket],
audiobookshelf-1  |       httpVersionMajor: 1,
audiobookshelf-1  |       httpVersionMinor: 1,
audiobookshelf-1  |       httpVersion: '1.1',
audiobookshelf-1  |       complete: false,
audiobookshelf-1  |       rawHeaders: [Array],
audiobookshelf-1  |       rawTrailers: [],
audiobookshelf-1  |       joinDuplicateHeaders: undefined,
audiobookshelf-1  |       aborted: true,
audiobookshelf-1  |       upgrade: false,
audiobookshelf-1  |       url: '',
audiobookshelf-1  |       method: null,
audiobookshelf-1  |       statusCode: 200,
audiobookshelf-1  |       statusMessage: 'OK',
audiobookshelf-1  |       client: [TLSSocket],
audiobookshelf-1  |       _consuming: true,
audiobookshelf-1  |       _dumped: false,
audiobookshelf-1  |       req: [Circular *1],
audiobookshelf-1  |       _eventsCount: 4,
audiobookshelf-1  |       responseUrl: 'https://latenightlinux.com/feed/all',
audiobookshelf-1  |       redirects: [],
audiobookshelf-1  |       [Symbol(shapeMode)]: true,
audiobookshelf-1  |       [Symbol(kCapture)]: false,
audiobookshelf-1  |       [Symbol(kHeaders)]: [Object],
audiobookshelf-1  |       [Symbol(kHeadersCount)]: 20,
audiobookshelf-1  |       [Symbol(kTrailers)]: null,
audiobookshelf-1  |       [Symbol(kTrailersCount)]: 0
audiobookshelf-1  |     },
audiobookshelf-1  |     aborted: false,
audiobookshelf-1  |     timeoutCb: null,
audiobookshelf-1  |     upgradeOrConnect: false,
audiobookshelf-1  |     parser: null,
audiobookshelf-1  |     maxHeadersCount: null,
audiobookshelf-1  |     reusedSocket: false,
audiobookshelf-1  |     host: 'latenightlinux.com',
audiobookshelf-1  |     protocol: 'https:',
audiobookshelf-1  |     _redirectable: Writable {
audiobookshelf-1  |       _events: [Object],
audiobookshelf-1  |       _writableState: [WritableState],
audiobookshelf-1  |       _maxListeners: undefined,
audiobookshelf-1  |       _options: [Object],
audiobookshelf-1  |       _ended: true,
audiobookshelf-1  |       _ending: true,
audiobookshelf-1  |       _redirectCount: 0,
audiobookshelf-1  |       _redirects: [],
audiobookshelf-1  |       _requestBodyLength: 0,
audiobookshelf-1  |       _requestBodyBuffers: [],
audiobookshelf-1  |       _eventsCount: 3,
audiobookshelf-1  |       _onNativeResponse: [Function (anonymous)],
audiobookshelf-1  |       _currentRequest: [Circular *1],
audiobookshelf-1  |       _currentUrl: 'https://latenightlinux.com/feed/all',
audiobookshelf-1  |       _timeout: null,
audiobookshelf-1  |       [Symbol(shapeMode)]: true,
audiobookshelf-1  |       [Symbol(kCapture)]: false
audiobookshelf-1  |     },
audiobookshelf-1  |     [Symbol(shapeMode)]: false,
audiobookshelf-1  |     [Symbol(kCapture)]: false,
audiobookshelf-1  |     [Symbol(kBytesWritten)]: 0,
audiobookshelf-1  |     [Symbol(kNeedDrain)]: false,
audiobookshelf-1  |     [Symbol(corked)]: 0,
audiobookshelf-1  |     [Symbol(kOutHeaders)]: [Object: null prototype] {
audiobookshelf-1  |       accept: [Array],
audiobookshelf-1  |       'user-agent': [Array],
audiobookshelf-1  |       host: [Array]
audiobookshelf-1  |     },
audiobookshelf-1  |     [Symbol(errored)]: null,
audiobookshelf-1  |     [Symbol(kHighWaterMark)]: 16384,
audiobookshelf-1  |     [Symbol(kRejectNonStandardBodyWrites)]: false,
audiobookshelf-1  |     [Symbol(kUniqueHeaders)]: null
audiobookshelf-1  |   }
audiobookshelf-1  | }
audiobookshelf-1  | [2024-11-13 15:38:15.345] ERROR: [PodcastManager] checkPodcastForNewEpisodes invalid feed payload for Late Night Linux Family All Episodes (ID: 6e3299a7-03a6-44b0-99e9-730a057cd3a6) null
audiobookshelf-1  | [2024-11-13 15:38:15.345] INFO: [PodcastManager] No new episodes found for podcast "Late Night Linux Family All Episodes"

Additional Notes

I've removed the Podcast and added the Podcast again - same result.

advplyr commented 18 hours ago

I was able to download the first episode fine. You're not seeing this with other RSS feeds? What about the regular late night linux RSS feed https://latenightlinux.com/feed/mp3?

sledge1977 commented 33 minutes ago

Seems to be related to my network connection to this server. Not an issue with ABS.