MagicMirror² v2.13.0 is available! For more information about this release, check out this topic.

axios request returns no data, while http request does


  • Module Developer

    I have set up an axios request for a module I’M trying to fix (MMM-Fantasy-Premier league)

                                axios.get(url)
                                    .then(function(response){
                                            console.log(response);
                                    }).catch(function(err){
                                            console.log(self.name + " : getleagueData : " + err);
                                    });
    

    The axios request gives me a this:

    {
      status: 200,
      statusText: 'OK',
      headers: {
        connection: 'close',
        'content-length': '0',
        server: 'Varnish',
        'retry-after': '0',
        'content-type': 'application/json',
        'accept-ranges': 'bytes',
        date: 'Fri, 11 Sep 2020 07:17:50 GMT',
        via: '1.1 varnish',
        'x-served-by': 'cache-hhn4058-HHN',
        'x-cache': 'MISS',
        'x-cache-hits': '0',
        'x-timer': 'S1599808670.050178,VS0,VE0'
      },
      config: {
        url: 'https://fantasy.premierleague.com/api/leagues-classic/63436/standings',
        method: 'get',
        headers: {
          Accept: 'application/json, text/plain, */*',
          'User-Agent': 'axios/0.20.0'
        },
        transformRequest: [ [Function: transformRequest] ],
        transformResponse: [ [Function: transformResponse] ],
        timeout: 0,
        adapter: [Function: httpAdapter],
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
        maxContentLength: -1,
        maxBodyLength: -1,
        validateStatus: [Function: validateStatus],
        data: undefined
      },
      request: ClientRequest {
        _events: [Object: null prototype] {
          socket: [Function],
          abort: [Function],
          aborted: [Function],
          connect: [Function],
          error: [Function],
          timeout: [Function],
          prefinish: [Function: requestOnPrefinish]
        },
        _eventsCount: 7,
        _maxListeners: undefined,
        outputData: [],
        outputSize: 0,
        writable: true,
        _last: true,
        chunkedEncoding: false,
        shouldKeepAlive: false,
        useChunkedEncodingByDefault: false,
        sendDate: false,
        _removedConnection: false,
        _removedContLen: false,
        _removedTE: false,
        _contentLength: 0,
        _hasBody: true,
        _trailer: '',
        finished: true,
        _headerSent: true,
        socket: TLSSocket {
          _tlsOptions: [Object],
          _secureEstablished: true,
          _securePending: false,
          _newSessionPending: false,
          _controlReleased: true,
          _SNICallback: null,
          servername: 'fantasy.premierleague.com',
          alpnProtocol: false,
          authorized: true,
          authorizationError: null,
          encrypted: true,
          _events: [Object: null prototype],
          _eventsCount: 10,
          connecting: false,
          _hadError: false,
          _parent: null,
          _host: 'fantasy.premierleague.com',
          _readableState: [ReadableState],
          readable: true,
          _maxListeners: undefined,
          _writableState: [WritableState],
          writable: false,
          allowHalfOpen: false,
          _sockname: null,
          _pendingData: null,
          _pendingEncoding: '',
          server: undefined,
          _server: null,
          ssl: [TLSWrap],
          _requestCert: true,
          _rejectUnauthorized: true,
          parser: null,
          _httpMessage: [Circular],
          [Symbol(res)]: [TLSWrap],
          [Symbol(asyncId)]: 5496,
          [Symbol(kHandle)]: [TLSWrap],
          [Symbol(lastWriteQueueSize)]: 0,
          [Symbol(timeout)]: null,
          [Symbol(kBytesRead)]: 0,
          [Symbol(kBytesWritten)]: 0,
          [Symbol(connect-options)]: [Object]
        },
        connection: TLSSocket {
          _tlsOptions: [Object],
          _secureEstablished: true,
          _securePending: false,
          _newSessionPending: false,
          _controlReleased: true,
          _SNICallback: null,
          servername: 'fantasy.premierleague.com',
          alpnProtocol: false,
          authorized: true,
          authorizationError: null,
          encrypted: true,
          _events: [Object: null prototype],
          _eventsCount: 10,
          connecting: false,
          _hadError: false,
          _parent: null,
          _host: 'fantasy.premierleague.com',
          _readableState: [ReadableState],
          readable: true,
          _maxListeners: undefined,
          _writableState: [WritableState],
          writable: false,
          allowHalfOpen: false,
          _sockname: null,
          _pendingData: null,
          _pendingEncoding: '',
          server: undefined,
          _server: null,
          ssl: [TLSWrap],
          _requestCert: true,
          _rejectUnauthorized: true,
          parser: null,
          _httpMessage: [Circular],
          [Symbol(res)]: [TLSWrap],
          [Symbol(asyncId)]: 5496,
          [Symbol(kHandle)]: [TLSWrap],
          [Symbol(lastWriteQueueSize)]: 0,
          [Symbol(timeout)]: null,
          [Symbol(kBytesRead)]: 0,
          [Symbol(kBytesWritten)]: 0,
          [Symbol(connect-options)]: [Object]
        },
        _header: 'GET /api/leagues-classic/63436/standings HTTP/1.1\r' +
          '\nAccept: application/json, text/plain, */*\r' +
          '\nUser-Agent: axios/0.20.0\r' +
          '\nHost: fantasy.premierleague.com\r' +
          '\nConnection: close\r' +
          '\n\r' +
          '\n',
        _onPendingData: [Function: noopPendingOutput],
        agent: Agent {
          _events: [Object: null prototype],
          _eventsCount: 1,
          _maxListeners: undefined,
          defaultPort: 443,
          protocol: 'https:',
          options: [Object],
          requests: {},
          sockets: [Object],
          freeSockets: {},
          keepAliveMsecs: 1000,
          keepAlive: false,
          maxSockets: Infinity,
          maxFreeSockets: 256,
          maxCachedSessions: 100,
          _sessionCache: [Object]
        },
        socketPath: undefined,
        method: 'GET',
        path: '/api/leagues-classic/63436/standings',
        _ended: true,
        res: IncomingMessage {
          _readableState: [ReadableState],
          readable: false,
          _events: [Object: null prototype],
          _eventsCount: 3,
          _maxListeners: undefined,
          socket: [TLSSocket],
          connection: [TLSSocket],
          httpVersionMajor: 1,
          httpVersionMinor: 1,
          httpVersion: '1.1',
          complete: true,
          headers: [Object],
          rawHeaders: [Array],
          trailers: {},
          rawTrailers: [],
          aborted: false,
          upgrade: false,
          url: '',
          method: null,
          statusCode: 200,
          statusMessage: 'OK',
          client: [TLSSocket],
          _consuming: false,
          _dumped: false,
          req: [Circular],
          responseUrl: 'https://fantasy.premierleague.com/api/leagues-classic/63436/standings',
          redirects: []
        },
        aborted: false,
        timeoutCb: null,
        upgradeOrConnect: false,
        parser: null,
        maxHeadersCount: null,
        _redirectable: Writable {
          _writableState: [WritableState],
          writable: true,
          _events: [Object: null prototype],
          _eventsCount: 2,
          _maxListeners: undefined,
          _options: [Object],
          _ended: true,
          _ending: true,
          _redirectCount: 0,
          _redirects: [],
          _requestBodyLength: 0,
          _requestBodyBuffers: [],
          _onNativeResponse: [Function],
          _currentRequest: [Circular],
          _currentUrl: 'https://fantasy.premierleague.com/api/leagues-classic/63436/standings'
        },
        [Symbol(isCorked)]: false,
        [Symbol(outHeadersKey)]: [Object: null prototype] {
          accept: [Array],
          'user-agent': [Array],
          host: [Array]
        }
      },
      data: ''
    }
    

    So response.data is empty.
    When I call this exact site in my browser I get a valid json esponse.

    What am I doing wrong?
    Does anyone know?


  • Module Developer

    Hi,

    Sometime something like this with https can help:

    const httpsAgentConfig = { rejectUnauthorized: false }
    this.axiosInstance = axios.create({
      httpsAgent: new https.Agent(httpsAgentConfig),
    })
    

    after adapt it with your code
    try it, no guaranties… but maybe …



  • Did you ever find out the answer to this, i’m having the same issue.


  • Module Developer

    No unfortunately not.
    Above addition did not help.

    I’m getting the feeling that the axios requests somehow closes before the data field is being returned. Haven’t tried much since it is not highest priority for me. But would appreciate any idea/suggestion.


Log in to reply