2014-02-12 73 views
2

我想使用eBay API获取SessionId。我使用Node.js作为后端。在响应中,我收到此错误:“输入传输已终止,因为您的请求超时”。eBay超时错误

要获得sessionId我正在使用以下方法。

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); 
}); 

回答

2

如果您发送空的POST正文,则可能会发生该错误。如果您查看nodejs docs,您将看到在使用https.request创建请求对象时,没有正文选项。

在请求定身正确的方法是调用req.end前致电req.write方法

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();