[Bug]: cannot download podcast episodes #2152

Closed
opened 2026-04-25 00:04:08 +02:00 by adam · 7 comments
Owner

Originally created by @savvasdalkitsis on GitHub (Aug 5, 2024).

What happened?

For the last couple of weeks I have been unable to download new episodes of my podcast. I am getting a ERR_BAD_REQUEST in the logs.

I tried removing the podcast and re-adding but the podcast search was failing with the same code.

I then updated to the latest version and the podcast search worked and I successfully added my podcast back but the episode download still fails

What did you expect to happen?

Episodes download

Steps to reproduce the issue

  1. Download any episode of my podcast fails

Audiobookshelf version

v2.12.1

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

[2024-08-05 21:56:43.340] INFO: [CoverManager] Downloaded libraryItem cover "/podcasts/James O'Brien - The Whole Show/cover.jpg" from url "https://is1-ssl.mzstatic.com/image/thumb/Podcasts116/v4/91/6a/41/916a41c5-f6df-15fb-874c-6449054c1476/mza_12205872153211695638.png/600x600bb.jpg" for "James O'Brien - The Whole Show"
[2024-08-05 21:57:06.704] ERROR: [ffmpegHelpers] Failed to download podcast episode with url "https://dax.captivate.fm/c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248" [AxiosError: Request failed with status code 401] {
  code: 'ERR_BAD_REQUEST',
  config: {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false
    },
    adapter: [Function: httpAdapter],
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 30000,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    env: { FormData: [Function] },
    validateStatus: [Function: validateStatus],
    headers: {
      Accept: 'application/json, text/plain, */*',
      'User-Agent': 'audiobookshelf (+https://audiobookshelf.org; like iTMS)'
    },
    url: 'https://dax.captivate.fm/c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248',
    method: 'get',
    responseType: 'stream',
    data: undefined
  },
  request: <ref *1> ClientRequest {
    _events: [Object: null prototype] {
      abort: [Function (anonymous)],
      aborted: [Function (anonymous)],
      connect: [Function (anonymous)],
      error: [Function (anonymous)],
      socket: [Function (anonymous)],
      timeout: [Function (anonymous)],
      finish: [Function: requestOnFinish]
    },
    _eventsCount: 7,
    _maxListeners: undefined,
    outputData: [],
    outputSize: 0,
    writable: true,
    destroyed: false,
    _last: true,
    chunkedEncoding: false,
    shouldKeepAlive: false,
    maxRequestsOnConnectionReached: false,
    _defaultKeepAlive: true,
    useChunkedEncodingByDefault: false,
    sendDate: false,
    _removedConnection: false,
    _removedContLen: false,
    _removedTE: false,
    strictContentLength: false,
    _contentLength: 0,
    _hasBody: true,
    _trailer: '',
    finished: true,
    _headerSent: true,
    _closed: false,
    socket: TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: true,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: false,
      _SNICallback: null,
      servername: 'dax.captivate.fm',
      alpnProtocol: false,
      authorized: true,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 9,
      connecting: false,
      _hadError: false,
      _parent: null,
      _host: 'dax.captivate.fm',
      _closeAfterHandlingError: false,
      _readableState: [ReadableState],
      _writableState: [WritableState],
      allowHalfOpen: false,
      _maxListeners: undefined,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: [TLSWrap],
      _requestCert: true,
      _rejectUnauthorized: true,
      timeout: 30000,
      parser: null,
      _httpMessage: [Circular *1],
      [Symbol(alpncallback)]: null,
      [Symbol(res)]: [TLSWrap],
      [Symbol(verified)]: true,
      [Symbol(pendingSession)]: null,
      [Symbol(async_id_symbol)]: 94659,
      [Symbol(kHandle)]: [TLSWrap],
      [Symbol(lastWriteQueueSize)]: 0,
      [Symbol(timeout)]: Timeout {
        _idleTimeout: 30000,
        _idlePrev: [TimersList],
        _idleNext: [Timeout],
        _idleStart: 70474,
        _onTimeout: [Function: bound ],
        _timerArgs: undefined,
        _repeat: null,
        _destroyed: false,
        [Symbol(refed)]: false,
        [Symbol(kHasPrimitive)]: false,
        [Symbol(asyncId)]: 94668,
        [Symbol(triggerId)]: 94663
      },
      [Symbol(kBuffer)]: null,
      [Symbol(kBufferCb)]: null,
      [Symbol(kBufferGen)]: null,
      [Symbol(shapeMode)]: true,
      [Symbol(kCapture)]: false,
      [Symbol(kSetNoDelay)]: false,
      [Symbol(kSetKeepAlive)]: true,
      [Symbol(kSetKeepAliveInitialDelay)]: 60,
      [Symbol(kBytesRead)]: 0,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(connect-options)]: [Object]
    },
    _header: 'GET /c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248 HTTP/1.1\r\n' +
      'Accept: application/json, text/plain, */*\r\n' +
      'User-Agent: audiobookshelf (+https://audiobookshelf.org; like iTMS)\r\n' +
      'Host: dax.captivate.fm\r\n' +
      'Connection: keep-alive\r\n' +
      '\r\n',
    _keepAliveTimeout: 0,
    _onPendingData: [Function: nop],
    agent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      defaultPort: 443,
      protocol: 'https:',
      options: [Object: null prototype],
      requests: [Object: null prototype] {},
      sockets: [Object: null prototype],
      freeSockets: [Object: null prototype] {},
      keepAliveMsecs: 1000,
      keepAlive: true,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      scheduling: 'lifo',
      maxTotalSockets: Infinity,
      totalSocketCount: 1,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      [Symbol(shapeMode)]: false,
      [Symbol(kCapture)]: false
    },
    socketPath: undefined,
    method: 'GET',
    maxHeaderSize: undefined,
    insecureHTTPParser: undefined,
    joinDuplicateHeaders: undefined,
    path: '/c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248',
    _ended: false,
    res: IncomingMessage {
      _events: [Object],
      _readableState: [ReadableState],
      _maxListeners: undefined,
      socket: [TLSSocket],
      httpVersionMajor: 1,
      httpVersionMinor: 1,
      httpVersion: '1.1',
      complete: true,
      rawHeaders: [Array],
      rawTrailers: [],
      joinDuplicateHeaders: undefined,
      aborted: false,
      upgrade: false,
      url: '',
      method: null,
      statusCode: 401,
      statusMessage: 'UNAUTHORIZED: THE REQUEST REQUIRES USER AUTHENTICATION',
      client: [TLSSocket],
      _consuming: false,
      _dumped: false,
      req: [Circular *1],
      _eventsCount: 1,
      responseUrl: 'https://dax.captivate.fm/c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248',
      redirects: [],
      [Symbol(shapeMode)]: true,
      [Symbol(kCapture)]: false,
      [Symbol(kHeaders)]: [Object],
      [Symbol(kHeadersCount)]: 4,
      [Symbol(kTrailers)]: null,
      [Symbol(kTrailersCount)]: 0
    },
    aborted: false,
    timeoutCb: [Function: emitRequestTimeout],
    upgradeOrConnect: false,
    parser: null,
    maxHeadersCount: null,
    reusedSocket: false,
    host: 'dax.captivate.fm',
    protocol: 'https:',
    },
    request: <ref *1> ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: false,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      strictContentLength: false,
      _contentLength: 0,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: false,
      socket: [TLSSocket],
      _header: 'GET /c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248 HTTP/1.1\r\n' +
        'Accept: application/json, text/plain, */*\r\n' +
        'User-Agent: audiobookshelf (+https://audiobookshelf.org; like iTMS)\r\n' +
        'Host: dax.captivate.fm\r\n' +
        'Connection: keep-alive\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'GET',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      joinDuplicateHeaders: undefined,
      path: '/c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248',
      _ended: false,
      res: [IncomingMessage],
      aborted: false,
      timeoutCb: [Function: emitRequestTimeout],
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'dax.captivate.fm',
      protocol: 'https:',
      _redirectable: [Writable],
      [Symbol(shapeMode)]: false,
      [Symbol(kCapture)]: false,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype],
      [Symbol(errored)]: null,
      [Symbol(kHighWaterMark)]: 16384,
      [Symbol(kRejectNonStandardBodyWrites)]: false,
      [Symbol(kUniqueHeaders)]: null
    },
    data: IncomingMessage {
      _events: [Object],
      _readableState: [ReadableState],
      _maxListeners: undefined,
      socket: [TLSSocket],
      httpVersionMajor: 1,
      httpVersionMinor: 1,
      httpVersion: '1.1',
      complete: true,
      rawHeaders: [Array],
      rawTrailers: [],
      joinDuplicateHeaders: undefined,
      aborted: false,
      upgrade: false,
      url: '',
      method: null,
      statusCode: 401,
      statusMessage: 'UNAUTHORIZED: THE REQUEST REQUIRES USER AUTHENTICATION',
      client: [TLSSocket],
      _consuming: false,
      _dumped: false,
      req: [ClientRequest],
      _eventsCount: 1,
      responseUrl: 'https://dax.captivate.fm/c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248',
      redirects: [],
      [Symbol(shapeMode)]: true,
      [Symbol(kCapture)]: false,
      [Symbol(kHeaders)]: [Object],
      [Symbol(kHeadersCount)]: 4,
      [Symbol(kTrailers)]: null,
      [Symbol(kTrailersCount)]: 0
    }
  }

Additional Notes

Note that I have tried fetching the urls reported as not working from inside the docker container using curl and it works fine so it's not a connectivity issue with my docker setup

Originally created by @savvasdalkitsis on GitHub (Aug 5, 2024). ### What happened? For the last couple of weeks I have been unable to download new episodes of my podcast. I am getting a `ERR_BAD_REQUEST` in the logs. I tried removing the podcast and re-adding but the podcast search was failing with the same code. I then updated to the latest version and the podcast search worked and I successfully added my podcast back but the episode download still fails ### What did you expect to happen? Episodes download ### Steps to reproduce the issue 1. Download any episode of my podcast fails ### Audiobookshelf version v2.12.1 ### 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 ```shell [2024-08-05 21:56:43.340] INFO: [CoverManager] Downloaded libraryItem cover "/podcasts/James O'Brien - The Whole Show/cover.jpg" from url "https://is1-ssl.mzstatic.com/image/thumb/Podcasts116/v4/91/6a/41/916a41c5-f6df-15fb-874c-6449054c1476/mza_12205872153211695638.png/600x600bb.jpg" for "James O'Brien - The Whole Show" [2024-08-05 21:57:06.704] ERROR: [ffmpegHelpers] Failed to download podcast episode with url "https://dax.captivate.fm/c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248" [AxiosError: Request failed with status code 401] { code: 'ERR_BAD_REQUEST', config: { transitional: { silentJSONParsing: true, forcedJSONParsing: true, clarifyTimeoutError: false }, adapter: [Function: httpAdapter], transformRequest: [ [Function: transformRequest] ], transformResponse: [ [Function: transformResponse] ], timeout: 30000, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1, env: { FormData: [Function] }, validateStatus: [Function: validateStatus], headers: { Accept: 'application/json, text/plain, */*', 'User-Agent': 'audiobookshelf (+https://audiobookshelf.org; like iTMS)' }, url: 'https://dax.captivate.fm/c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248', method: 'get', responseType: 'stream', data: undefined }, request: <ref *1> ClientRequest { _events: [Object: null prototype] { abort: [Function (anonymous)], aborted: [Function (anonymous)], connect: [Function (anonymous)], error: [Function (anonymous)], socket: [Function (anonymous)], timeout: [Function (anonymous)], finish: [Function: requestOnFinish] }, _eventsCount: 7, _maxListeners: undefined, outputData: [], outputSize: 0, writable: true, destroyed: false, _last: true, chunkedEncoding: false, shouldKeepAlive: false, maxRequestsOnConnectionReached: false, _defaultKeepAlive: true, useChunkedEncodingByDefault: false, sendDate: false, _removedConnection: false, _removedContLen: false, _removedTE: false, strictContentLength: false, _contentLength: 0, _hasBody: true, _trailer: '', finished: true, _headerSent: true, _closed: false, socket: TLSSocket { _tlsOptions: [Object], _secureEstablished: true, _securePending: false, _newSessionPending: false, _controlReleased: true, secureConnecting: false, _SNICallback: null, servername: 'dax.captivate.fm', alpnProtocol: false, authorized: true, authorizationError: null, encrypted: true, _events: [Object: null prototype], _eventsCount: 9, connecting: false, _hadError: false, _parent: null, _host: 'dax.captivate.fm', _closeAfterHandlingError: false, _readableState: [ReadableState], _writableState: [WritableState], allowHalfOpen: false, _maxListeners: undefined, _sockname: null, _pendingData: null, _pendingEncoding: '', server: undefined, _server: null, ssl: [TLSWrap], _requestCert: true, _rejectUnauthorized: true, timeout: 30000, parser: null, _httpMessage: [Circular *1], [Symbol(alpncallback)]: null, [Symbol(res)]: [TLSWrap], [Symbol(verified)]: true, [Symbol(pendingSession)]: null, [Symbol(async_id_symbol)]: 94659, [Symbol(kHandle)]: [TLSWrap], [Symbol(lastWriteQueueSize)]: 0, [Symbol(timeout)]: Timeout { _idleTimeout: 30000, _idlePrev: [TimersList], _idleNext: [Timeout], _idleStart: 70474, _onTimeout: [Function: bound ], _timerArgs: undefined, _repeat: null, _destroyed: false, [Symbol(refed)]: false, [Symbol(kHasPrimitive)]: false, [Symbol(asyncId)]: 94668, [Symbol(triggerId)]: 94663 }, [Symbol(kBuffer)]: null, [Symbol(kBufferCb)]: null, [Symbol(kBufferGen)]: null, [Symbol(shapeMode)]: true, [Symbol(kCapture)]: false, [Symbol(kSetNoDelay)]: false, [Symbol(kSetKeepAlive)]: true, [Symbol(kSetKeepAliveInitialDelay)]: 60, [Symbol(kBytesRead)]: 0, [Symbol(kBytesWritten)]: 0, [Symbol(connect-options)]: [Object] }, _header: 'GET /c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248 HTTP/1.1\r\n' + 'Accept: application/json, text/plain, */*\r\n' + 'User-Agent: audiobookshelf (+https://audiobookshelf.org; like iTMS)\r\n' + 'Host: dax.captivate.fm\r\n' + 'Connection: keep-alive\r\n' + '\r\n', _keepAliveTimeout: 0, _onPendingData: [Function: nop], agent: Agent { _events: [Object: null prototype], _eventsCount: 2, _maxListeners: undefined, defaultPort: 443, protocol: 'https:', options: [Object: null prototype], requests: [Object: null prototype] {}, sockets: [Object: null prototype], freeSockets: [Object: null prototype] {}, keepAliveMsecs: 1000, keepAlive: true, maxSockets: Infinity, maxFreeSockets: 256, scheduling: 'lifo', maxTotalSockets: Infinity, totalSocketCount: 1, maxCachedSessions: 100, _sessionCache: [Object], [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false }, socketPath: undefined, method: 'GET', maxHeaderSize: undefined, insecureHTTPParser: undefined, joinDuplicateHeaders: undefined, path: '/c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248', _ended: false, res: IncomingMessage { _events: [Object], _readableState: [ReadableState], _maxListeners: undefined, socket: [TLSSocket], httpVersionMajor: 1, httpVersionMinor: 1, httpVersion: '1.1', complete: true, rawHeaders: [Array], rawTrailers: [], joinDuplicateHeaders: undefined, aborted: false, upgrade: false, url: '', method: null, statusCode: 401, statusMessage: 'UNAUTHORIZED: THE REQUEST REQUIRES USER AUTHENTICATION', client: [TLSSocket], _consuming: false, _dumped: false, req: [Circular *1], _eventsCount: 1, responseUrl: 'https://dax.captivate.fm/c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248', redirects: [], [Symbol(shapeMode)]: true, [Symbol(kCapture)]: false, [Symbol(kHeaders)]: [Object], [Symbol(kHeadersCount)]: 4, [Symbol(kTrailers)]: null, [Symbol(kTrailersCount)]: 0 }, aborted: false, timeoutCb: [Function: emitRequestTimeout], upgradeOrConnect: false, parser: null, maxHeadersCount: null, reusedSocket: false, host: 'dax.captivate.fm', protocol: 'https:', }, request: <ref *1> ClientRequest { _events: [Object: null prototype], _eventsCount: 7, _maxListeners: undefined, outputData: [], outputSize: 0, writable: true, destroyed: false, _last: true, chunkedEncoding: false, shouldKeepAlive: false, maxRequestsOnConnectionReached: false, _defaultKeepAlive: true, useChunkedEncodingByDefault: false, sendDate: false, _removedConnection: false, _removedContLen: false, _removedTE: false, strictContentLength: false, _contentLength: 0, _hasBody: true, _trailer: '', finished: true, _headerSent: true, _closed: false, socket: [TLSSocket], _header: 'GET /c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248 HTTP/1.1\r\n' + 'Accept: application/json, text/plain, */*\r\n' + 'User-Agent: audiobookshelf (+https://audiobookshelf.org; like iTMS)\r\n' + 'Host: dax.captivate.fm\r\n' + 'Connection: keep-alive\r\n' + '\r\n', _keepAliveTimeout: 0, _onPendingData: [Function: nop], agent: [Agent], socketPath: undefined, method: 'GET', maxHeaderSize: undefined, insecureHTTPParser: undefined, joinDuplicateHeaders: undefined, path: '/c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248', _ended: false, res: [IncomingMessage], aborted: false, timeoutCb: [Function: emitRequestTimeout], upgradeOrConnect: false, parser: null, maxHeadersCount: null, reusedSocket: false, host: 'dax.captivate.fm', protocol: 'https:', _redirectable: [Writable], [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false, [Symbol(kBytesWritten)]: 0, [Symbol(kNeedDrain)]: false, [Symbol(corked)]: 0, [Symbol(kOutHeaders)]: [Object: null prototype], [Symbol(errored)]: null, [Symbol(kHighWaterMark)]: 16384, [Symbol(kRejectNonStandardBodyWrites)]: false, [Symbol(kUniqueHeaders)]: null }, data: IncomingMessage { _events: [Object], _readableState: [ReadableState], _maxListeners: undefined, socket: [TLSSocket], httpVersionMajor: 1, httpVersionMinor: 1, httpVersion: '1.1', complete: true, rawHeaders: [Array], rawTrailers: [], joinDuplicateHeaders: undefined, aborted: false, upgrade: false, url: '', method: null, statusCode: 401, statusMessage: 'UNAUTHORIZED: THE REQUEST REQUIRES USER AUTHENTICATION', client: [TLSSocket], _consuming: false, _dumped: false, req: [ClientRequest], _eventsCount: 1, responseUrl: 'https://dax.captivate.fm/c403c4c2-1602-425a-a595-c712dbe3cc47/james-ob-05-08.mp3?aw_0_1st.showid=2a0297d7-7270-4787-a0aa-0deb22605752&aw_0_1st.episodeid=9c6cb53e-3f6e-4a90-aa1d-8d100b3cb248', redirects: [], [Symbol(shapeMode)]: true, [Symbol(kCapture)]: false, [Symbol(kHeaders)]: [Object], [Symbol(kHeadersCount)]: 4, [Symbol(kTrailers)]: null, [Symbol(kTrailersCount)]: 0 } } ``` ### Additional Notes Note that I have tried fetching the urls reported as not working from inside the docker container using curl and it works fine so it's not a connectivity issue with my docker setup
adam added the bug label 2026-04-25 00:04:08 +02:00
adam closed this issue 2026-04-25 00:04:08 +02:00
Author
Owner

@advplyr commented on GitHub (Aug 6, 2024):

That podcast is returning a 401 Unauthorized when our User-Agent string is included.

'User-Agent': 'audiobookshelf (+https://audiobookshelf.org; like iTMS)'

I removed the like iTMS part and it worked.

That was originally added https://github.com/advplyr/audiobookshelf/pull/3099. I don't think they should be returning a 401 for that User-Agent so it seems to be a bug on their part.

Do you have other podcasts that are doing that?

@advplyr commented on GitHub (Aug 6, 2024): That podcast is returning a 401 Unauthorized when our User-Agent string is included. ``` 'User-Agent': 'audiobookshelf (+https://audiobookshelf.org; like iTMS)' ``` I removed the `like iTMS` part and it worked. That was originally added https://github.com/advplyr/audiobookshelf/pull/3099. I don't think they should be returning a 401 for that User-Agent so it seems to be a bug on their part. Do you have other podcasts that are doing that?
Author
Owner

@nichwall commented on GitHub (Aug 6, 2024):

This is related to https://github.com/advplyr/audiobookshelf/issues/3227 as well

@nichwall commented on GitHub (Aug 6, 2024): This is related to https://github.com/advplyr/audiobookshelf/issues/3227 as well
Author
Owner

@savvasdalkitsis commented on GitHub (Aug 6, 2024):

Hm interesting. I don't have another podcast unfortunately as this is a relatively new installation and have only been using it for one podcast.

Might be useful for us to be able to override the user agent somehow via a config to resolve these sorts of things that are not a bug with audiobookself itself

@savvasdalkitsis commented on GitHub (Aug 6, 2024): Hm interesting. I don't have another podcast unfortunately as this is a relatively new installation and have only been using it for one podcast. Might be useful for us to be able to override the user agent somehow via a config to resolve these sorts of things that are not a bug with audiobookself itself
Author
Owner

@MaximUltimatum commented on GitHub (Aug 7, 2024):

I'm having the same issue. No new episodes are being downloaded across several different podcasts. My error message when I attempt to force a rescan are different though:

[podcastUtils] getPodcastFeed Error Error: getaddrinfo EAI_AGAIN www.patreon.com

For Jupiter Broadcasting's Coder Radio private members feed, and the following for a patron based RSS for Lions Led By Donkeys

[podcastUtils] getPodcastFeed Error Error: getaddrinfo EAI_AGAIN www.patreon.com

2024-08-07 11:16:52.929

ERROR

[PodcastManager] checkPodcastForNewEpisodes invalid feed payload for Lions Led by Donkeys (ID: 9f55b516-415c-4047-9e02-ef5455b25478)

Adding these in case it helps. I'm busy tonight but could do more triage after work tomorrow.

@MaximUltimatum commented on GitHub (Aug 7, 2024): I'm having the same issue. No new episodes are being downloaded across several different podcasts. My error message when I attempt to force a rescan are different though: ``` [podcastUtils] getPodcastFeed Error Error: getaddrinfo EAI_AGAIN www.patreon.com ``` For Jupiter Broadcasting's _Coder Radio_ private members feed, and the following for a patron based RSS for _Lions Led By Donkeys_ ``` [podcastUtils] getPodcastFeed Error Error: getaddrinfo EAI_AGAIN www.patreon.com 2024-08-07 11:16:52.929 ERROR [PodcastManager] checkPodcastForNewEpisodes invalid feed payload for Lions Led by Donkeys (ID: 9f55b516-415c-4047-9e02-ef5455b25478) ``` Adding these in case it helps. I'm busy tonight but could do more triage after work tomorrow.
Author
Owner

@advplyr commented on GitHub (Aug 7, 2024):

@MaximUltimatum It is unlikely that is the same issue. EAI_AGAIN errors have been brought up a lot and every time it has been a DNS issue and not an Abs issue.
You can see them https://github.com/advplyr/audiobookshelf/issues?q=is%3Aissue+EAI_AGAIN+is%3Aclosed

@advplyr commented on GitHub (Aug 7, 2024): @MaximUltimatum It is unlikely that is the same issue. EAI_AGAIN errors have been brought up a lot and every time it has been a DNS issue and not an Abs issue. You can see them https://github.com/advplyr/audiobookshelf/issues?q=is%3Aissue+EAI_AGAIN+is%3Aclosed
Author
Owner

@steveb166 commented on GitHub (Aug 8, 2024):

I am having exactly the same issue with "Taskmaster The Podcast"

@steveb166 commented on GitHub (Aug 8, 2024): I am having exactly the same issue with "Taskmaster The Podcast"
Author
Owner

@github-actions[bot] commented on GitHub (Aug 9, 2024):

Fixed in v2.12.2.

@github-actions[bot] commented on GitHub (Aug 9, 2024): Fixed in [v2.12.2](https://github.com/advplyr/audiobookshelf/releases/tag/v2.12.2).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/audiobookshelf#2152