LinkedIn API失败 – Node.js请求

我正在尝试使用请求模块对Node.js进行REST API调用。 我已经获得了accessToken和accessTokenSecret。

当我进行api调用来获取我的个人资料时,我得到了一个结果,但是当我做一个api调用来做公司search时,我得到以下错误

<error> <status>401</status> <timestamp>1345187981287</timestamp> <request-id>HE45IXV7YZ</request-id> <error-code>0</error-code> <message>[unauthorized]. OAU:xxxxx|xxxxx|*01|*01:1345188248:kCNFNUu6JePTEy7k5e8Ca9vHAzg=</message> </error> 

但是当我使用JAVA(Scribe jar)进行相同的API调用时,使用相同的accessToken和accessTokenSecret,我得到了公司search的结果。

我发布我的node.js代码以供参考

 //oauth test var request = require('request'); var key = 'xxxxx'; var secret = 'xxxxx'; var redirect = ''; var restURL = 'http://api.linkedin.com/v1/company-search?keywords=philips&format=json'; var accessToken = 'xxxxx'; var accessTokenSecret = 'xxxxx'; var proxySetting = "http://proxy:port/"; function getRequestToken() { var requestOAuth = { consumer_key: key , consumer_secret: secret //, token: accessToken //, token_secret: accessTokenSecret }; var requestTokenURL = 'https://api.linkedin.com/uas/oauth/requestToken'; request.get({'proxy':proxySetting,url:requestTokenURL,oauth:requestOAuth},function(e,r,data) { console.log('Error is: ' + e); console.log('Data is: ' + data); console.log('Response is: ' + r); }); } function getAccessToken() { var accessOAuth = { consumer_key: key , consumer_secret: secret , token: 'xxxxx' , token_secret: 'xxxx' ,verifier : ##### }; var accessTokenURL = 'https://api.linkedin.com/uas/oauth/accessToken'; request.get({'proxy':proxySetting,url:accessTokenURL,oauth:accessOAuth},function(e,r,data) { console.log('Error is: ' + e); console.log('Data is: ' + data); console.log('Response is: ' + r); }); } / function comSearch() { var apiToken = 'xxxxx'; var apiTokenSecret = 'xxxxx'; var apiOAuth = { consumer_key: key , consumer_secret: secret , token: apiToken , token_secret: apiTokenSecret }; var apiURL = 'http://api.linkedin.com/v1/company-search?keywords=philips'; var peopleProfile = 'http://api.linkedin.com/v1/people/~'; request.get({'proxy':proxySetting,url:apiURL,oauth:apiOAuth},function(e,r,data) { console.log('Error is: ' + e); console.log('Data is: ' + data); console.log('Response is: ' + r); }); } comSearch(); 

以下是我的标题

 Response is: GET http://api.linkedin.com/v1/company-search?keywords=philips HTTP/1.1 host: api.linkedin.com Authorization: OAuth keywords="philips",oauth_consumer_key="xxx",oauth_nonce="xxx",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1345189928",oauth_token="xxx",oauth_version="1.0",oauth_signature="xxx" content-length: 0 Connection: keep-alive 

由于签名问题,可能会出现一些错误吗?

我已经发布了这个问题 ,但在这里张贴到达更广泛的受众


编辑1

我使用请求模块的原因是,它帮助我在代理之后执行oauth。

我很想尝试Passport.js或node-oauth或链接,但似乎没有选项,我可以指定我的代理

我设法使用node-oauth来工作

显然有提供的代码修复,以便我们可以通过代理访问node-oauth,并且工作得很好。

Jared Hanson在这个SO问题中提到了通过http代理使用node-oauth的问题 。 在http-proxy上修复node-oauth可以在这里find

请分享您生成的基本签名string。 看起来好像你的查询参数没有被正确地添加到签名string中。 在linkedIn论坛的一些旧post中,我已经看到参数需要在string中组织,以便以字母数字顺序login。