97

nodejsrequest [2]を使用して、Google QPX Express API [1] に HTTP POST リクエストを作成しようとしています。

私のコードは次のようになります。

    // create http request client to consume the QPX API
    var request = require("request")

    // JSON to be passed to the QPX Express API
    var requestData = {
        "request": {
            "slice": [
                {
                    "origin": "ZRH",
                    "destination": "DUS",
                    "date": "2014-12-02"
                }
            ],
            "passengers": {
                "adultCount": 1,
                "infantInLapCount": 0,
                "infantInSeatCount": 0,
                "childCount": 0,
                "seniorCount": 0
            },
            "solutions": 2,
            "refundable": false
        }
    }

    // QPX REST API URL (I censored my api key)
    url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=myApiKey"

    // fire request
    request({
        url: url,
        json: true,
        multipart: {
            chunked: false,
            data: [
                {
                    'content-type': 'application/json',
                    body: requestData
                }
            ]
        }
    }, function (error, response, body) {
        if (!error && response.statusCode === 200) {
            console.log(body)
        }
        else {

            console.log("error: " + error)
            console.log("response.statusCode: " + response.statusCode)
            console.log("response.statusText: " + response.statusText)
        }
    })

私がやろうとしているのは、マルチパート引数 [3] を使用して JSON を渡すことです。しかし、適切な JSON 応答ではなく、エラー (400 未定義) が返されました。

代わりに CURL を使用して同じ JSON と API キーを使用してリクエストを行うと、正常に動作します。したがって、API キーまたは JSON に問題はありません。

コードの何が問題になっていますか?

編集

実際の CURL の例:

i) リクエストに渡す JSON を「request.json」というファイルに保存しました。

{
  "request": {
    "slice": [
      {
        "origin": "ZRH",
        "destination": "DUS",
        "date": "2014-12-02"
      }
    ],
    "passengers": {
      "adultCount": 1,
      "infantInLapCount": 0,
      "infantInSeatCount": 0,
      "childCount": 0,
      "seniorCount": 0
    },
    "solutions": 20,
    "refundable": false
  }
}

ii) 次に、ターミナルで、新しく作成された request.json ファイルが配置されているディレクトリに切り替えて実行しました (myApiKey は明らかに実際の API キーを表します)。

curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=myApiKey

[1] https://developers.google.com/qpx-express/ [2] nodejs 用に設計された http リクエスト クライアント: https://www.npmjs.org/package/request [3] 私が見つけた例を次に示します。https://www.npmjs.org/package/request#multipart-related [4] QPX Express API が 400 解析エラーを返す

4

9 に答える 9

10

マルチパートは必要ありませんが、Content-Type: application/json代わりに「プレーンな」POST リクエスト ( with ) が必要です。必要なものは次のとおりです。

var request = require('request');

var requestData = {
  request: {
    slice: [
      {
        origin: "ZRH",
        destination: "DUS",
        date: "2014-12-02"
      }
    ],
    passengers: {
      adultCount: 1,
      infantInLapCount: 0,
      infantInSeatCount: 0,
      childCount: 0,
      seniorCount: 0
    },
    solutions: 2,
    refundable: false
  }
};

request('https://www.googleapis.com/qpxExpress/v1/trips/search?key=myApiKey',
        { json: true, body: requestData },
        function(err, res, body) {
  // `body` is a js object if request was successful
});
于 2014-11-28T14:26:48.153 に答える