【问题标题】:Request To API Succeeds In Browser But Fails From Node对 API 的请求在浏览器中成功,但在节点中失败
【发布时间】:2017-02-13 13:23:46
【问题描述】:

我想向public colour analysis API 提出请求:

http://mkweb.bcgsc.ca/color-summarizer?url=http://www.undistraction.com/vangogh/images/fisherman_s_wife_on_the_beach-8.jpg&precision=vlow&num_clusters=7&json=1&histogram=0&pixel=0

如果我将此 URL 放入 Chrome 的地址栏中,我会在大约 10 秒后返回一个 JSON 对象,但是当从 Node 发出请求时,我只会收到 ESOCKETTIMEDOUT 错误。

request.get({
  uri: 'http://mkweb.bcgsc.ca/color-summarizer?url=http://www.undistraction.com/vangogh/images/fisherman_s_wife_on_the_beach-8.jpg&precision=vlow&num_clusters=7&json=1&histogram=0&pixel=0',
  timeout: 60000,
 })
.on('error', (error) => {
  console.log(error); // ESOCKETTIMEDOUT
})
.on('finish', (body) => {
  // Happy place
});

什么可能导致此错误?

【问题讨论】:

    标签: node.js get request socket-timeout-exception


    【解决方案1】:

    我怀疑这是因为标题中没有用户代理。

    不妨试试:

    request.get({
      uri: 'http://mkweb.bcgsc.ca/color-summarizer?url=http://www.undistraction.com/vangogh/images/fisherman_s_wife_on_the_beach-8.jpg&precision=vlow&num_clusters=7&json=1&histogram=0&pixel=0',
      timeout: 60000,
      headers: {'User-Agent': 'Some user agent string'}
    });
    

    也许您需要从浏览器中复制用户代理字符串。另一种可能的解决方案可能是没有正确的 cookie 等。您确定您有权访问该端点吗?

    查看此答案了解更多信息:

    【讨论】:

    • 感谢您的建议。我试过几个用户代理,结果都一样,而且端点肯定是公开的。
    猜你喜欢
    • 2019-12-11
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2018-07-29
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多