1

request モジュールを使用して Node.js への REST API 呼び出しを実行しようとしています。accessToken と accessTokenSecret を取得しました。

プロファイルを取得するために API 呼び出しを行うと結果が得られますが、企業検索を行うために API 呼び出しを行うと、次のエラーが発生します。

<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 を使用して、企業検索の結果が得られます。

参照用に以下に 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

requestモジュールを使用している理由は、プロキシの背後で oauth を実行するのに役立つからです。

Passport.jsnode-oauth、またはlinked-inを試してみたいのですが、プロキシを指定できるオプションがないようです

4

2 に答える 2

2

node-oauth を使用してなんとか動作させることができました

どうやら、プロキシ経由で node-oauth にアクセスできるように提供されたコード修正があり、それは完全に正常に動作します。

http-proxy で node-oauth を使用するための修正は、このSO Questionで Jared Hanson によって言及されました。http-proxy を介した node-oauth のこの修正は、ここにあります。

于 2012-08-17T10:49:06.963 に答える
0

生成された基本署名文字列を共有してください。クエリ パラメータが署名文字列に正しく追加されていないようです。linkedIn フォーラムの古い投稿で、英数字順に署名するには、文字列内で params を整理する必要があることを確認しました。

于 2012-08-17T09:00:15.853 に答える