我正在try 使用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)
        }
    })

我试图做的是使用multipart参数[3]传递JSON.

当我使用相同的JSON和API键而不是使用CURL发出请求时,它可以正常工作.所以我的API密钥或JSON没有问题.

我的代码怎么了?

EDIT:

工作示例:

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)然后,在终端中,我切换到新创建的请求所在的目录.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/

推荐答案

我认为以下措施应该有效:

// fire request
request({
    url: url,
    method: "POST",
    json: requestData
}, ...

在这种情况下,将自动添加Content-type: application/json页眉.

Node.js相关问答推荐

aws cdk 2.0 init 应用程序无法构建更漂亮的问题,这来自 jest-snapshot

Node.js 大文件上传到 MongoDB 阻塞了事件循环和工作池

如果 express.js (node.js) http 请求在完成之前关闭会发生什么?

使用新react 18.0.0 的 create-react-app my-app redux 错误

node.js 变量不存在代码块

无法更新MongoDB中的文档:";伯森场';writeConcern.w';是错误的类型';数组'&引用;

baseurl64 缓冲区解码

ChunkLoadError:加载块 node_modules_next_dist_client_dev_noop_js 失败

有什么方法可以修复 package-lock.json lockfileVersion 以便 npm 使用特定格式?

在 Node.js 中导入:错误“必须使用导入来加载 ES 模块”

适用于 Windows 7 的 NodeJS

`npm install` 在 node-gyp 重建时失败,并带有`gyp:未检测到 Xcode 或 CLT 版本!`

如何在 Node.js 12 中使用可选链

使用 pm2 编程 api 重命名进程

如何配置 axios 使用 SSL 证书?

npm 错误! 404 未找到:事件流@3.3.6

弃用警告:collection.findAndModify 已弃用.改用 findOneAndUpdate、findOneAndReplace 或 findOneAndDelete?

处理快速异步中间件中的错误

TypeError:winston.Logger 不是带有winston 和morgan 的构造函数

错误:EACCES:权限被拒绝,访问“/usr/local/lib/node_modules”