You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.1 KiB
88 lines
2.1 KiB
2 years ago
|
/* eslint-disable prefer-promise-reject-errors */
|
||
2 years ago
|
/* eslint-disable no-param-reassign */
|
||
|
import { http, https } from "follow-redirects";
|
||
|
|
||
2 years ago
|
import { addCookieToJar, setCookieHeader } from "./cookie-jar";
|
||
2 years ago
|
|
||
|
function addCookieHandler(url, params) {
|
||
|
setCookieHeader(url, params);
|
||
2 years ago
|
|
||
|
// handle cookies during redirects
|
||
|
params.beforeRedirect = (options, responseInfo) => {
|
||
2 years ago
|
addCookieToJar(options.href, responseInfo.headers);
|
||
2 years ago
|
setCookieHeader(options.href, options);
|
||
2 years ago
|
};
|
||
|
}
|
||
2 years ago
|
|
||
2 years ago
|
export function httpsRequest(url, params) {
|
||
2 years ago
|
return new Promise((resolve, reject) => {
|
||
2 years ago
|
addCookieHandler(url, params);
|
||
2 years ago
|
const request = https.request(url, params, (response) => {
|
||
|
const data = [];
|
||
2 years ago
|
|
||
|
response.on("data", (chunk) => {
|
||
2 years ago
|
data.push(chunk);
|
||
2 years ago
|
});
|
||
|
|
||
|
response.on("end", () => {
|
||
2 years ago
|
addCookieToJar(url, response.headers);
|
||
2 years ago
|
resolve([response.statusCode, response.headers["content-type"], Buffer.concat(data), response.headers]);
|
||
2 years ago
|
});
|
||
|
});
|
||
|
|
||
|
request.on("error", (error) => {
|
||
|
reject([500, error]);
|
||
|
});
|
||
|
|
||
2 years ago
|
if (params.body) {
|
||
|
request.write(params.body);
|
||
|
}
|
||
|
|
||
2 years ago
|
request.end();
|
||
|
});
|
||
|
}
|
||
|
|
||
2 years ago
|
export function httpRequest(url, params) {
|
||
2 years ago
|
return new Promise((resolve, reject) => {
|
||
2 years ago
|
addCookieHandler(url, params);
|
||
2 years ago
|
const request = http.request(url, params, (response) => {
|
||
|
const data = [];
|
||
2 years ago
|
|
||
|
response.on("data", (chunk) => {
|
||
2 years ago
|
data.push(chunk);
|
||
2 years ago
|
});
|
||
|
|
||
|
response.on("end", () => {
|
||
2 years ago
|
addCookieToJar(url, response.headers);
|
||
2 years ago
|
resolve([response.statusCode, response.headers["content-type"], Buffer.concat(data), response.headers]);
|
||
2 years ago
|
});
|
||
|
});
|
||
|
|
||
|
request.on("error", (error) => {
|
||
|
reject([500, error]);
|
||
|
});
|
||
|
|
||
2 years ago
|
if (params.body) {
|
||
|
request.write(params.body);
|
||
|
}
|
||
|
|
||
2 years ago
|
request.end();
|
||
|
});
|
||
|
}
|
||
2 years ago
|
|
||
|
export function httpProxy(url, params = {}) {
|
||
|
const constructedUrl = new URL(url);
|
||
|
|
||
|
if (constructedUrl.protocol === "https:") {
|
||
|
const httpsAgent = new https.Agent({
|
||
|
rejectUnauthorized: false,
|
||
|
});
|
||
|
|
||
|
return httpsRequest(constructedUrl, {
|
||
|
agent: httpsAgent,
|
||
|
...params,
|
||
|
});
|
||
|
}
|
||
2 years ago
|
return httpRequest(constructedUrl, params);
|
||
2 years ago
|
}
|