请求API在浏览器中成功但从节点失败

时间:2017-02-13 13:23:47

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

我想向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

如果我将此网址放入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
});

可能导致此错误的原因是什么?

1 个答案:

答案 0 :(得分:2)

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

也许试试:

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等。您确定您有权获得该端点吗?

有关详细信息,请参阅此答案: