mirror of
https://github.com/FlareSolverr/FlareSolverr.git
synced 2025-06-08 20:45:27 +00:00
Set puppeteer timeout half of maxTimeout param. Resolves #180
This commit is contained in:
parent
a6628d0cda
commit
753e8e1be8
@ -143,6 +143,7 @@ export async function controllerV1(req: Request, res: Response): Promise<void> {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const params: V1RequestBase = req.body
|
const params: V1RequestBase = req.body
|
||||||
|
// do some validations
|
||||||
if (!params.cmd) {
|
if (!params.cmd) {
|
||||||
throw Error("Request parameter 'cmd' is mandatory.")
|
throw Error("Request parameter 'cmd' is mandatory.")
|
||||||
}
|
}
|
||||||
@ -153,10 +154,15 @@ export async function controllerV1(req: Request, res: Response): Promise<void> {
|
|||||||
log.warn("Request parameter 'userAgent' was removed in FlareSolverr v2.")
|
log.warn("Request parameter 'userAgent' was removed in FlareSolverr v2.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set default values
|
||||||
|
if (!params.maxTimeout || params.maxTimeout < 1) {
|
||||||
|
params.maxTimeout = 60000;
|
||||||
|
}
|
||||||
|
|
||||||
|
// execute the command
|
||||||
const route = routes[params.cmd]
|
const route = routes[params.cmd]
|
||||||
if (route) {
|
if (route) {
|
||||||
await route(params, response)
|
await route(params, response)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
throw Error(`The command '${params.cmd}' is invalid.`)
|
throw Error(`The command '${params.cmd}' is invalid.`)
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,8 @@ const CAPTCHA_SELECTORS = ['input[name="cf_captcha_kind"]'];
|
|||||||
export default async function resolveChallenge(url: string, page: Page, response: Response): Promise<Response> {
|
export default async function resolveChallenge(url: string, page: Page, response: Response): Promise<Response> {
|
||||||
|
|
||||||
// look for challenge and return fast if not detected
|
// look for challenge and return fast if not detected
|
||||||
if (response.headers().server.startsWith('cloudflare') &&
|
if (response.headers().server &&
|
||||||
|
response.headers().server.startsWith('cloudflare') &&
|
||||||
(response.status() == 403 || response.status() == 503)) {
|
(response.status() == 403 || response.status() == 503)) {
|
||||||
log.info('Cloudflare detected');
|
log.info('Cloudflare detected');
|
||||||
} else {
|
} else {
|
||||||
|
@ -24,13 +24,12 @@ export interface ChallengeResolutionT {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function resolveChallengeWithTimeout(params: V1Request, session: SessionsCacheItem) {
|
async function resolveChallengeWithTimeout(params: V1Request, session: SessionsCacheItem) {
|
||||||
const maxTimeout = params.maxTimeout || 60000
|
|
||||||
const timer = new Timeout();
|
const timer = new Timeout();
|
||||||
try {
|
try {
|
||||||
const promise = resolveChallenge(params, session);
|
const promise = resolveChallenge(params, session);
|
||||||
return await Promise.race([
|
return await Promise.race([
|
||||||
promise,
|
promise,
|
||||||
timer.set(maxTimeout, `Maximum timeout reached. maxTimeout=${maxTimeout} (ms)`)
|
timer.set(params.maxTimeout, `Maximum timeout reached. maxTimeout=${params.maxTimeout} (ms)`)
|
||||||
]);
|
]);
|
||||||
} finally {
|
} finally {
|
||||||
timer.clear();
|
timer.clear();
|
||||||
@ -44,6 +43,10 @@ async function resolveChallenge(params: V1Request, session: SessionsCacheItem):
|
|||||||
|
|
||||||
const page: Page = await session.browser.newPage()
|
const page: Page = await session.browser.newPage()
|
||||||
|
|
||||||
|
// the Puppeter timeout should be half the maxTimeout because we reload the page and wait for challenge
|
||||||
|
// the user can set a really high maxTimeout if he wants to
|
||||||
|
await page.setDefaultNavigationTimeout(params.maxTimeout / 2)
|
||||||
|
|
||||||
// the user-agent is changed just for linux arm build
|
// the user-agent is changed just for linux arm build
|
||||||
await page.setUserAgent(sessions.getUserAgent())
|
await page.setUserAgent(sessions.getUserAgent())
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user