mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
feat(installer): Support HTTP mirror (#1372)
This patch adds support for HTTP mirror for ChromiumDownloader. This fixes #1371
This commit is contained in:
parent
b28adbb438
commit
c55f4e3268
@ -15,7 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
const os = require('os');
|
const os = require('os');
|
||||||
const https = require('https');
|
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const extract = require('extract-zip');
|
const extract = require('extract-zip');
|
||||||
@ -67,18 +66,17 @@ module.exports = {
|
|||||||
canDownloadRevision: function(platform, revision) {
|
canDownloadRevision: function(platform, revision) {
|
||||||
console.assert(downloadURLs[platform], 'Unknown platform: ' + platform);
|
console.assert(downloadURLs[platform], 'Unknown platform: ' + platform);
|
||||||
|
|
||||||
const options = requestOptions(util.format(downloadURLs[platform], DEFAULT_DOWNLOAD_HOST, revision), 'HEAD');
|
const url = util.format(downloadURLs[platform], DEFAULT_DOWNLOAD_HOST, revision);
|
||||||
|
|
||||||
let resolve;
|
let resolve;
|
||||||
const promise = new Promise(x => resolve = x);
|
const promise = new Promise(x => resolve = x);
|
||||||
const request = https.request(options, response => {
|
const request = httpRequest(url, 'HEAD', response => {
|
||||||
resolve(response.statusCode === 200);
|
resolve(response.statusCode === 200);
|
||||||
});
|
});
|
||||||
request.on('error', error => {
|
request.on('error', error => {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
resolve(false);
|
resolve(false);
|
||||||
});
|
});
|
||||||
request.end();
|
|
||||||
return promise;
|
return promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -192,8 +190,7 @@ function downloadFile(url, destinationPath, progressCallback) {
|
|||||||
|
|
||||||
const promise = new Promise((x, y) => { fulfill = x; reject = y; });
|
const promise = new Promise((x, y) => { fulfill = x; reject = y; });
|
||||||
|
|
||||||
const options = requestOptions(url);
|
const request = httpRequest(url, 'GET', response => {
|
||||||
const request = https.get(options, response => {
|
|
||||||
if (response.statusCode !== 200) {
|
if (response.statusCode !== 200) {
|
||||||
const error = new Error(`Download failed: server returned code ${response.statusCode}. URL: ${url}`);
|
const error = new Error(`Download failed: server returned code ${response.statusCode}. URL: ${url}`);
|
||||||
// consume response data to free up memory
|
// consume response data to free up memory
|
||||||
@ -226,19 +223,23 @@ function extractZip(zipPath, folderPath) {
|
|||||||
return new Promise(fulfill => extract(zipPath, {dir: folderPath}, fulfill));
|
return new Promise(fulfill => extract(zipPath, {dir: folderPath}, fulfill));
|
||||||
}
|
}
|
||||||
|
|
||||||
function requestOptions(url, method = 'GET') {
|
function httpRequest(url, method, response) {
|
||||||
/** @type {Object} */
|
/** @type {Object} */
|
||||||
const result = URL.parse(url);
|
const options = URL.parse(url);
|
||||||
result.method = method;
|
options.method = method;
|
||||||
|
|
||||||
const proxyURL = getProxyForUrl(url);
|
const proxyURL = getProxyForUrl(url);
|
||||||
if (proxyURL) {
|
if (proxyURL) {
|
||||||
/** @type {Object} */
|
/** @type {Object} */
|
||||||
const parsedProxyURL = URL.parse(proxyURL);
|
const parsedProxyURL = URL.parse(proxyURL);
|
||||||
parsedProxyURL.secureProxy = parsedProxyURL.protocol === 'https:';
|
parsedProxyURL.secureProxy = parsedProxyURL.protocol === 'https:';
|
||||||
result.agent = new ProxyAgent(parsedProxyURL);
|
|
||||||
result.rejectUnauthorized = false;
|
options.agent = new ProxyAgent(parsedProxyURL);
|
||||||
|
options.rejectUnauthorized = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
const driver = options.protocol === 'https:' ? 'https' : 'http';
|
||||||
|
const request = require(driver).request(options, response);
|
||||||
|
request.end();
|
||||||
|
return request;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user