Функция 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, полученная ссылка имеет правильный формат, но она просто не работает. Он перенаправляет на какой-то несуществующий домен. Я не совсем уверен, как это вообще возможно. Единственное, о чем я могу подумать, это то, что веб-сайт может подумать, что программа является ботом (логически) и дать неправильную ссылку (что звучит довольно странно). Но я решил также отправить несколько заголовков пользовательских агентов. Это тоже не сработало.

Я действительно смущен тем, как это возможно, и даже не знаю, что еще можно попробовать. Какие-нибудь мысли?

0 ответов

Другие вопросы по тегам