我正在尝试编写一个非常简单的解决方案来从我的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',