From b29a9121f2b0c050af553ef67df3eb3bac2cd43f Mon Sep 17 00:00:00 2001 From: cjh980402 <9804cjh@naver.com> Date: Mon, 13 Sep 2021 14:13:36 +0900 Subject: [PATCH] Add https request error handling --- play-dl/YouTube/stream.ts | 9 +++---- play-dl/YouTube/utils/request.ts | 42 ++++++++++++++++++++------------ 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/play-dl/YouTube/stream.ts b/play-dl/YouTube/stream.ts index 3c29288..8f50b5c 100644 --- a/play-dl/YouTube/stream.ts +++ b/play-dl/YouTube/stream.ts @@ -1,13 +1,12 @@ import { video_info } from "." import { LiveStreaming, Stream } from "./classes/LiveStream" -import { request } from "./utils/request" export enum StreamType{ Arbitrary = 'arbitrary', - Raw = 'raw', - OggOpus = 'ogg/opus', - WebmOpus = 'webm/opus', - Opus = 'opus', + Raw = 'raw', + OggOpus = 'ogg/opus', + WebmOpus = 'webm/opus', + Opus = 'opus', } interface InfoData{ diff --git a/play-dl/YouTube/utils/request.ts b/play-dl/YouTube/utils/request.ts index 39693a4..7010f35 100644 --- a/play-dl/YouTube/utils/request.ts +++ b/play-dl/YouTube/utils/request.ts @@ -10,17 +10,18 @@ interface RequestOpts extends RequestOptions{ async function https_getter(req_url : string, options : RequestOpts = {}): Promise{ return new Promise((resolve, reject) => { let s = new URL(req_url) - if(!options.method) options.method = "GET" + options.method ??= "GET" let req_options : RequestOptions = { host : s.hostname, path : s.pathname + s.search, - headers : (options.headers) ? options.headers : {}, + headers : options.headers ?? {}, method : options.method } let req = https.request(req_options, (response) => { resolve(response) }) + req.on('error', reject) if(options.method === "POST") req.write(options.body) req.end() }) @@ -28,27 +29,36 @@ async function https_getter(req_url : string, options : RequestOpts = {}): Promi export async function request(url : string, options? : RequestOpts): Promise{ return new Promise(async (resolve, reject) => { - let data = '' - let res = await https_getter(url, options) - if(Number(res.statusCode) >= 300 && Number(res.statusCode) < 400){ - res = await https_getter(res.headers.location as string , options) + try{ + let data = '' + let res = await https_getter(url, options) + if(Number(res.statusCode) >= 300 && Number(res.statusCode) < 400){ + res = await https_getter(res.headers.location as string , options) + } + else if(Number(res.statusCode) > 400){ + reject(`Got ${res.statusCode} from the request`) + } + res.setEncoding('utf-8') + res.on('data', (c) => data+=c) + res.on('end', () => resolve(data)) } - else if(Number(res.statusCode) > 400){ - reject(`Got ${res.statusCode} from the request`) + catch(err) { + reject(err) } - res.setEncoding('utf-8') - res.on('data', (c) => data+=c) - res.on('end', () => resolve(data)) }) } export async function request_stream(url : string, options? : RequestOpts): Promise{ return new Promise(async (resolve, reject) => { - let data = '' - let res = await https_getter(url, options) - if(Number(res.statusCode) >= 300 && Number(res.statusCode) < 400){ - res = await https_getter(res.headers.location as string, options) + try{ + let res = await https_getter(url, options) + if(Number(res.statusCode) >= 300 && Number(res.statusCode) < 400){ + res = await https_getter(res.headers.location as string, options) + } + resolve(res) + } + catch(err){ + reject(err) } - resolve(res) }) } \ No newline at end of file