Node.js: Как загрузить файл через HTTPS / POST-запрос - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь загрузить файл с www.borsaistanbul.com Для какого-то файла (например, по ссылке => https://www.borsaistanbul.com/veriler/verileralt/hisse-senetleri-piyasasi-verileri/bulten-verileri) они указали пути к файлам, чтобы я смог загрузить их легко можно получить через https.get (downloadLink).

Но для файлов в https://www.borsaistanbul.com/veriler/verileralt/hisse-senetleri-piyasasi-verileri/piyasa-verileri они не предоставляют пути и ссылки для скачивания. Я пытаюсь скачать файл под названием «Üye Bazında Seanslık İşlem Sıralaması» (тот, что во 2-м ряду). Я могу ошибаться, но, насколько я понимаю, когда вы нажимаете на изображение для загрузки рядом с ним, ваш браузер делает Запрос POST, а затем он запускает что-то на стороне сервера, а затем сервер предоставляет файл вам. Я нашел запрос POST с помощью инструмента chromeDeveloper и попытался смоделировать его, но он, похоже, не работает. Может ли кто-нибудь помочь и показать мне, как загрузить этот файл?

Вот пример кода, который я пробовал:

fs = require('fs');
const request = require('request');
/* Create an empty file where we can save data */
let file = fs.createWriteStream(`denemePost.zip`);
/* Using Promises so that we can use the ASYNC AWAIT syntax */        

new Promise((resolve, reject) => {
    let stream = request.post({
        /* Here you should specify the exact link to the file you are trying to download */
        uri: 'https://www.borsaistanbul.com/veriler/verileralt/hisse-senetleri-piyasasi-verileri/bulten-verileri',
        headers: {
            // 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
            'Accept-Encoding': 'gzip, deflate, br',
            // 'Accept-Language': 'en-US,en;q=0.9,fr;q=0.8,ro;q=0.7,ru;q=0.6,la;q=0.5,pt;q=0.4,de;q=0.3',
            'Accept-Language' : 'en-US,en;q=0.9',
            'Cache-Control': 'max-age=0',
            'Connection': 'keep-alive',
            'Content-Length' : '7511',
            'Content-Type' : 'application/x-www-form-urlencoded',
            'Cookie' : 'ASP.NET_SessionId=vugebk1zob2fw2hgxiftjg1z; cPER=!SmE/fvI1sjF1DqtSzYfA84hhMFmKdR+VmPTaX1WlhB8KHfkS3iP2fO2FK2iyUzwiDyupy85iZItfoeo=; _ga=GA1.2.534681471.1587587675; _gid=GA1.2.113108587.1588205109',
            'Host': 'www.borsaistanbul.com',
            'Origin' : 'null',
            'Sec-Fetch-Dest': 'document',
            'Sec-Fetch-Mode' : 'navigate', 
            'Sec-Fetch-Site' : 'same-origin',
            'Sec-Fetch-User': '?1',
            'Upgrade-Insecure-Requests': '1',
            // 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
            'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'
        },
        /* GZIP true for most of the websites now, disable it if you don't need it */
        gzip: true
    })
    .pipe(file)
    .on('finish', () => {
        console.log(`The file is finished downloading.`);
        resolve();
    })
    .on('error', (error) => {
        reject(error);
    })
})
.catch(error => {
    console.log(`Something happened: ${error}`);
});

Любая помощь будет высоко ценится, заранее спасибо

1 Ответ

0 голосов
/ 30 апреля 2020

Я нашел обходной путь, если кто-нибудь попытается выполнить sh аналогичную вещь. Я скачал файл с библиотеками кукловодов.

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({headless: false,slowMo: 250});
  const page = await browser.newPage();
  await page.goto('https://www.borsaistanbul.com/veriler/verileralt/hisse-senetleri-piyasasi-verileri/piyasa-verileri');
  page.once('load', () => console.log('Page loaded!'));
  await page.waitForSelector('#TextContent_C001_lbtnUyeBazindaGunlukIslemSiralamasi');
  await page.click('#TextContent_C001_lbtnUyeBazindaGunlukIslemSiralamasi');
  await browser.close();
})();
...