14

私のコードは、ローカルの Node.js サーバーから Coldfusion API にデータを送信しようとしています。API と通信し、リクエスト ヘッダーを介して自分自身を認証することができました。ただし、構造を正しく取得できないため、実際にJSONオブジェクトを渡すのに苦労しています。

API はリクエスト モジュールの JSON オプションを受け入れないため、これが私の最も簡単なオプションです。

API は次のことを想定しています。

{ 
    'source': { 
        'customer': {
            'customerlogin': 'myusername',
            'customerpassword': 'mypassword',
         }
     }
}

次の body パラメーターを (他の誰かによる成功した投稿から) 私の投稿にハードコーディングすると、私のコードは機能します。

var Jrequest = require('request');

var options = {
  uri: 'http://myAPI/customerSSO.json',
  headers: {'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': something', 'Timestamp': timestamp},
  method: 'POST',
  body: 'source=%7B%0D%0A++%22customer%22%3A+%7B%0D%0A++++%22customerlogin%22%3A+%22myusername%22%2C%0D%0A++++%22customerpassword%22%3A+%22mypassword%22%2C%0D%0A%09%22success%22%3A+%22%22%0D%0A++%7D%0D%0A%7D' // Working
};


Jrequest(options, function (error, response, body){
    res.send(body);
});

json.stringify() など、他の方法で JSON を送信すると、「ソースが必要ですが定義されていない」という理由で拒否されます。

だから私の質問は、node.jsでJSONを次のように変換するにはどうすればよいかということだと思います

'source=%7B%0D%0A++%22customer%22%3A+%7B%0D%0A++++%22customerlogin%22%3A+%22myusername%22%2C%0D%0A++++%22customerpassword%22%3A+%22mypassword%22%2C%0D%0A%09%22success%22%3A+%22%22%0D%0A++%7D%0D%0A%7D'

または、別のオプションを見落としていますか?

間違った用語を使用した場合は、助けてくれてありがとう。

4

1 に答える 1

7

私はこれがうまくいくと思います:

var querystring = require('querystring');
...
request({
  ...
  headers : { 'Content-Type': 'application/x-www-form-urlencoded', ... },
  body    : 'source=' + querystring.escape(JSON.stringify({
    'customer': {
      'customerlogin': 'myusername',
      'customerpassword': 'mypassword',
    }
  })),
  ...
}, ...)

あなたの例には改行や改行なども含まれていますが、それらはオプションであると想定しています。

于 2013-10-15T11:02:01.407 に答える