Функция Node.js дает разные результаты при работе на моей машине и в AWS-Lambda.
У меня есть функция узла, которая получает ссылку на видео YouTube и отправляет запрос на https://www.convertmp3.io/. Это сайт, который позволяет скачивать MP3 с YT.
Затем он анализирует HTML-код ответа, чтобы получить прямую ссылку для загрузки из документа (используя библиотеку с именем "cheerio", но если вы с ней не знакомы, это просто для удаления ссылки из HTML), а затем открывает ссылку на скачать MP3.
Мой код:
const request = require("request")
const cheerio = require("cheerio")
let link = "https://www.convertmp3.io/download/?video=https://www.youtube.com/watch?v=RRSDTE5nWnc"
const options = {
url: link,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
};
request(options, (error, response, html) => {
if(!error && response.statusCode == 200)
{
const $ = cheerio.load(html)
const document = $('.infoBox')
let href = "https://www.convertmp3.io" + document.find("#download").attr('href')
console.log(href)
}
})
Работая на моей машине, этот код работает правильно. На console.log есть ссылка, которую я могу открыть в своем браузере и увидеть, что mp3 действительно загружается.
Но когда я запускаю его на Lambda, полученная ссылка имеет правильный формат, но она просто не работает. Он перенаправляет на какой-то несуществующий домен. Я не совсем уверен, как это вообще возможно. Единственное, о чем я могу подумать, это то, что веб-сайт может подумать, что программа является ботом (логически) и дать неправильную ссылку (что звучит довольно странно). Но я решил также отправить несколько заголовков пользовательских агентов. Это тоже не сработало.
Я действительно смущен тем, как это возможно, и даже не знаю, что еще можно попробовать. Какие-нибудь мысли?