Функция Node.js дает разные результаты при работе на моей машине и в AWS-Lambda. - PullRequest
0 голосов
/ 08 января 2019

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

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

...