[英]When request is made in aws lambda module of nodejs environment, 403 is returned for two specific domains
在nodejs環境的aws lambda模塊中提出請求時,將為兩個特定域返回403。 但是,僅調用該域將不會返回403。這同樣適用於請求模塊,而不適用於征服者模塊。
在本地執行相同的邏輯通常會將所有響應返回到200。
這是上傳到lambda的源。
const Crawler = require('crawler');
const urls = [
'http://www.ddengle.com',
'http://www.cointalk.co.kr',
'http://www.chaintalk.io',
'http://www.coinpan.com',
'http://www.hozaebox.com',
'https://gall.dcinside.com/board/lists?id=bitcoins',
'https://gall.dcinside.com/mgallery/board/lists?id=coin',
];
exports.handler = async (event) => {
return new Promise(async (resolve) => {
const crawler = new Crawler({
maxConnections: 10,
jQuery: 'whacko',
callback(err, res, done) {
if (err) throw err;
const hostname = res.request.uri.hostname;
if (res.statusCode === 200) {
console.log(hostname);
} else console.log(`[crawler] ${hostname} statusCode ${res.statusCode}`);
done();
},
});
crawler.on('drain', () => {
resolve();
});
urls.forEach((e) => {
crawler.queue([{
headers: {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
},
uri: e,
}]);
});
});
};
出於我的目的,這只是一個請求調用,因此所有值都應以200回答。但是,對lambda運行測試將為www.ddengle.com或coinpan.com無條件返回403。
START RequestId: f3cc4977-11af-4ab1-9556-9b778efd1f72 Version: $LATEST
2019-08-23T08:13:36.593Z f3cc4977-11af-4ab1-9556-9b778efd1f72 INFO www.chaintalk.io
2019-08-23T08:13:36.811Z f3cc4977-11af-4ab1-9556-9b778efd1f72 INFO [crawler] www.ddengle.com statusCode 403
2019-08-23T08:13:37.170Z f3cc4977-11af-4ab1-9556-9b778efd1f72 INFO www.hozaebox.com
2019-08-23T08:13:37.454Z f3cc4977-11af-4ab1-9556-9b778efd1f72 INFO gall.dcinside.com
2019-08-23T08:13:37.873Z f3cc4977-11af-4ab1-9556-9b778efd1f72 INFO gall.dcinside.com
2019-08-23T08:13:38.391Z f3cc4977-11af-4ab1-9556-9b778efd1f72 INFO www.cointalk.co.kr
2019-08-23T08:13:39.153Z f3cc4977-11af-4ab1-9556-9b778efd1f72 INFO coinpan.com
END RequestId: f3cc4977-11af-4ab1-9556-9b778efd1f72
請將您的Lambda移至VPC,然后從特定IP發出Lambda請求。 我假設Lambda在VPC外部運行(默認行為)時,沒有與其關聯的IP,並且您嘗試爬網的網站可能會將其阻止。
ddengle.com
域似乎受到cloudflare的保護,只能通過https
訪問。
curl -I http://www.ddengle.com
HTTP/1.1 301 Moved Permanently
Date: Fri, 23 Aug 2019 08:31:50 GMT
Connection: keep-alive
Cache-Control: max-age=3600
Expires: Fri, 23 Aug 2019 09:31:50 GMT
Location: https://www.ddengle.com/
X-Content-Type-Options: nosniff
Server: cloudflare
它可以是國家/地區阻止,WAF,瀏覽器完整性檢查...
此處的完整列表: https : //community.cloudflare.com/t/community-tip-fixing-error-403-forbidden/53308
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.