eBay API call in Node.js returns 'Input transfer has been terminated because your request timed out'

StackOverflow https://stackoverflow.com/questions/21725961

  •  10-10-2022
  •  | 
  •  

Question

I want to get SessionId using eBay API. I am using Node.js as back-end. In the response I am getting this error:

Input transfer has been terminated because your request timed out.

To get sessionId I am using following approach.

var xml = '<?xml version="1.0" encoding="utf-8"?>'+
'<GetSessionIDRequest xmlns="urn:ebay:apis:eBLBaseComponents">'+
 '<RuName>MyRuname</RuName>'+
'</GetSessionIDRequest>';

var options = {
host: "api.sandbox.ebay.com",
path: '/ws/api.dll',
method: "POST",
body: xml,
headers: {
    'X-EBAY-API-APP-NAME': 'my app id',
    'X-EBAY-API-DEV-NAME': 'my dev id',
    'X-EBAY-API-CERT-NAME': 'my cert id',
    'X-EBAY-API-COMPATIBILITY-LEVEL': '557',
    'X-EBAY-API-CALL-NAME': 'GetSessionID',
    'X-EBAY-API-SITEID':'203',
    'Content-Type' : 'text/xml',
    'Content-Length':xml.length
}
};

var req = https.request(options, function (res) {
  console.log("statusCode: ", res.statusCode);
  console.log("headers: ", res.headers);

   res.on('data', function (d) {
     process.stdout.write(d);

  });

});

req.end();

req.on('error', function (e) {
   console.error('error=======', e);
});
Was it helpful?

Solution

The error can occur if you send an empty POST body. If you look at the nodejs docs you will see that there is no body option when creating the request object with https.request.

The correct way of setting the body in the request is to call the req.write method before calling req.end

var options = {
    host: "api.sandbox.ebay.com",
    path: '/ws/api.dll',
    method: "POST",
    headers: {
        'X-EBAY-API-APP-NAME': 'my app id',
        'X-EBAY-API-DEV-NAME': 'my dev id',
        'X-EBAY-API-CERT-NAME': 'my cert id',
        'X-EBAY-API-COMPATIBILITY-LEVEL': '557',
        'X-EBAY-API-CALL-NAME': 'GetSessionID',
        'X-EBAY-API-SITEID':'203',
        'Content-Type' : 'text/xml',
        'Content-Length':xml.length
    }
};

var req = https.request(options, function (res) {
    console.log("statusCode: ", res.statusCode);
    console.log("headers: ", res.headers);

    res.on('data', function (d) {
        process.stdout.write(d);
    });
});

req.on('error', function (e) {
    console.error('error=======', e);
});

req.write(xml);

req.end();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top