【问题标题】:Very simple API request fails with Request.js, works with Curl非常简单的 API 请求使用 Request.js 失败,适用于 Curl
【发布时间】:2020-03-12 03:03:58
【问题描述】:

对 API 的简单查询,curl 请求有效,但是当我尝试利用 request NPM 模块执行请求时失败。

卷曲:

curl "https://api.squarespace.com/1.0/commerce/orders?modifiedAfter=2019-11-01T12:00:00Z&modifiedBefore=2019-11-15T12:00:00Z" \
  -H "Authorization: Bearer abcde"

请求:

  const response = await request({
     method: 'GET',
     uri:
        'https://api.squarespace.com/1.0/commerce/orders?modifiedAfter=2019-11-01T12:00:00Z&modifiedBefore=2019-11-15T12:00:00Z',
     headers: {
        Authorization: 'Bearer abcde'
     }
  });

curl 请求成功,请求 js 报告状态码 400 立即出错。你能告诉我我的请求使用有什么问题吗?它与 curl 生成的请求有何不同?

正在使用最新版本的请求。

【问题讨论】:

  • 请尝试将--verbose 选项添加到curl 以查看curl 在请求期间发送哪些标头。例如,curl 可能会发送 Accept: */*,但您对 request 的请求不会。

标签: node.js curl https requestjs


【解决方案1】:

您的请求选项中的键必须是“url”而不是“uri” 并且不要忘记设置wille被调用的回调函数(这样你也会看到有返回的错误)

const request = require('request');

const options = {
  url: 'https://api.squarespace.com/1.0/commerce/orders?modifiedAfter=2019-11-01T12:00:00Z&modifiedBefore=2019-11-15T12:00:00Z',
  headers: {
     'Authorization': `Bearer abcde`
  }
};

function callback(error, response, body) {
  console.error('error:', error); 
  console.log('statusCode:', response && response.statusCode); 
  console.log('body:', body); 
}

request(options, callback);

【讨论】:

  • 请求文档显示 uri 和 url 都是受支持的参数,并且更改不会产生影响。我没有使用回调,因为我实际上是在使用带有 async/await 的“request-promise-native”包。
  • 那我不知道:/也许你可以尝试 axios 或 node-fetch 作为最后的手段
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 2021-09-21
  • 2021-09-06
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多