使用节点请求从airbnb日历中拒绝间歇访问

时间:2017-05-24 04:20:52

标签: node.js curl request airbnb

我正在尝试编写一个非常简单的解决方案来从我的Airbnb下载和解析日历文件。 Airbnb以日常格式提供日历,每个用户都有一个唯一的URL,例如:

https://www.airbnb.com/calendar/ical/1234.ics?s=abcd 这些数字(1234 / 5678)是唯一的十六进制密钥以提供一些安全性。

每当我点击我的(私人)网址时,如果我使用浏览器,它会立即回复。我可以使用任何浏览器,甚至是之前从未访问过airbnb.com的其他国家/地区的浏览器。 (我已经远程访问了我在调试时尝试过的服务器。)

在nodejs中,它仅在大约10%的时间内起作用。大多数情况下,403

的文字出现You don't have permission to access (redacted url) on this server.错误

示例代码:

const request = require('request');
request.get(url, (error, response, body) => {
  if (!error && response.statusCode === 200) {
    return callback(null, body);
  }
  return callback('error');
});

这是在这里使用请求包:https://github.com/request/request

我已经在async.whilst循环中进行了设置,如果我在每个循环之间设置了多秒延迟,则需要大约50次尝试才能取消成功。 (顺便说一下,https://github.com/caolan/async太棒了,所以检查一下,如果你还没有。)

如果它每次都失败了,那就不同了,但事实上它偶尔会失败真的让我难过。此外,浏览器似乎每次都会成功。

curl [url]每次都有效。那么我在请求中没有指定我需要的东西吗?

修改1:

根据要求,回复中的更多标题。我一开始还认为这是限速的。问题是这一切都来自同一个开发盒。我可以卷曲,或从浏览器请求多次没有问题。我可以在24小时内回来并使用nodejs代码,它会在第一次失败,或者前50次失败。

  headers:
   { server: 'AkamaiGHost',
     'mime-version': '1.0',
     'content-type': 'text/html',
     'content-length': '307',
     expires: 'Wed, 24 May 2017 17:23:28 GMT',
     date: 'Wed, 24 May 2017 17:23:28 GMT',
     connection: 'close',
     'set-cookie': [ 'mdr_browser=desktop; expires=Wed, 24-May-2017 19:23:28 GMT; path=/; domain=.airbnb.com' ] },
  rawHeaders:
   [ 'Server',
     'AkamaiGHost',
     'Mime-Version',
     '1.0',
     'Content-Type',
     'text/html',
     'Content-Length',
     '307',
     'Expires',
     'Wed, 24 May 2017 17:23:28 GMT',
     'Date',
     'Wed, 24 May 2017 17:23:28 GMT',
     'Connection',
     'close',
     'Set-Cookie',
     'mdr_browser=desktop; expires=Wed, 24-May-2017 19:23:28 GMT; path=/; domain=.airbnb.com' ],
  trailers: {},
  rawTrailers: [],
  upgrade: false,
  url: '',
  method: null,
  statusCode: 403,
  statusMessage: 'Forbidden',

0 个答案:

没有答案