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 {
|
||||
const params: V1RequestBase = req.body
|
||||
// do some validations
|
||||
if (!params.cmd) {
|
||||
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.")
|
||||
}
|
||||
|
||||
// set default values
|
||||
if (!params.maxTimeout || params.maxTimeout < 1) {
|
||||
params.maxTimeout = 60000;
|
||||
}
|
||||
|
||||
// execute the command
|
||||
const route = routes[params.cmd]
|
||||
if (route) {
|
||||
await route(params, response)
|
||||
|
||||
} else {
|
||||
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> {
|
||||
|
||||
// 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)) {
|
||||
log.info('Cloudflare detected');
|
||||
} else {
|
||||
|
@ -24,13 +24,12 @@ export interface ChallengeResolutionT {
|
||||
}
|
||||
|
||||
async function resolveChallengeWithTimeout(params: V1Request, session: SessionsCacheItem) {
|
||||
const maxTimeout = params.maxTimeout || 60000
|
||||
const timer = new Timeout();
|
||||
try {
|
||||
const promise = resolveChallenge(params, session);
|
||||
return await Promise.race([
|
||||
promise,
|
||||
timer.set(maxTimeout, `Maximum timeout reached. maxTimeout=${maxTimeout} (ms)`)
|
||||
timer.set(params.maxTimeout, `Maximum timeout reached. maxTimeout=${params.maxTimeout} (ms)`)
|
||||
]);
|
||||
} finally {
|
||||
timer.clear();
|
||||
@ -44,6 +43,10 @@ async function resolveChallenge(params: V1Request, session: SessionsCacheItem):
|
||||
|
||||
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
|
||||
await page.setUserAgent(sessions.getUserAgent())
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user