mirror of
https://github.com/FlareSolverr/FlareSolverr.git
synced 2025-06-08 12:35:30 +00:00
Fix Cloudflare resolver for Linux ARM builds
This commit is contained in:
parent
ca3f84f458
commit
0459f2642d
@ -46,6 +46,12 @@ async function testWebBrowserInstallation() {
|
|||||||
const page = await session.browser.newPage()
|
const page = await session.browser.newPage()
|
||||||
await page.goto("https://www.google.com")
|
await page.goto("https://www.google.com")
|
||||||
webBrowserUserAgent = await page.evaluate(() => navigator.userAgent)
|
webBrowserUserAgent = await page.evaluate(() => navigator.userAgent)
|
||||||
|
|
||||||
|
// replace Linux ARM user-agent because it's detected
|
||||||
|
if (webBrowserUserAgent.toLocaleLowerCase().includes('linux arm')) {
|
||||||
|
webBrowserUserAgent = webBrowserUserAgent.replace(/linux arm[^;]+;/i, 'Linux x86_64;')
|
||||||
|
}
|
||||||
|
|
||||||
log.info("FlareSolverr User-Agent: " + webBrowserUserAgent)
|
log.info("FlareSolverr User-Agent: " + webBrowserUserAgent)
|
||||||
await page.close()
|
await page.close()
|
||||||
await sessions.destroy(sessionId)
|
await sessions.destroy(sessionId)
|
||||||
@ -177,7 +183,7 @@ testWebBrowserInstallation()
|
|||||||
if (!validateIncomingRequest(ctx, params)) { return }
|
if (!validateIncomingRequest(ctx, params)) { return }
|
||||||
|
|
||||||
// process request
|
// process request
|
||||||
Router(ctx, params).catch(e => {
|
Router(ctx, params, webBrowserUserAgent).catch(e => {
|
||||||
console.error(e)
|
console.error(e)
|
||||||
ctx.errorResponse(e.message)
|
ctx.errorResponse(e.message)
|
||||||
})
|
})
|
||||||
|
@ -38,7 +38,7 @@ interface BaseRequestAPICall extends BaseAPICall {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface Routes {
|
interface Routes {
|
||||||
[key: string]: (ctx: RequestContext, params: BaseAPICall) => void | Promise<void>
|
[key: string]: (ctx: RequestContext, params: BaseAPICall, webBrowserUserAgent: string) => void | Promise<void>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ChallengeResolutionResultT {
|
interface ChallengeResolutionResultT {
|
||||||
@ -158,12 +158,16 @@ function mergeSessionWithParams({ defaults }: SessionsCacheItem, params: BaseReq
|
|||||||
return copy
|
return copy
|
||||||
}
|
}
|
||||||
|
|
||||||
async function setupPage(ctx: RequestContext, params: BaseRequestAPICall, browser: Browser): Promise<Page> {
|
async function setupPage(ctx: RequestContext, params: BaseRequestAPICall, browser: Browser,
|
||||||
|
webBrowserUserAgent: string): Promise<Page> {
|
||||||
const page = await browser.newPage()
|
const page = await browser.newPage()
|
||||||
|
|
||||||
// merge session defaults with params
|
// merge session defaults with params
|
||||||
const { method, postData, headers, cookies } = params
|
const { method, postData, headers, cookies } = params
|
||||||
|
|
||||||
|
// the user-agent is changed just for linux arm build
|
||||||
|
await page.setUserAgent(webBrowserUserAgent)
|
||||||
|
|
||||||
// todo: redo all functionality
|
// todo: redo all functionality
|
||||||
|
|
||||||
// let overrideResolvers: OverrideResolvers = {}
|
// let overrideResolvers: OverrideResolvers = {}
|
||||||
@ -223,7 +227,7 @@ async function setupPage(ctx: RequestContext, params: BaseRequestAPICall, browse
|
|||||||
return page
|
return page
|
||||||
}
|
}
|
||||||
|
|
||||||
const browserRequest = async (ctx: RequestContext, params: BaseRequestAPICall) => {
|
const browserRequest = async (ctx: RequestContext, params: BaseRequestAPICall, webBrowserUserAgent: string) => {
|
||||||
const oneTimeSession = params.session === undefined
|
const oneTimeSession = params.session === undefined
|
||||||
const sessionId = params.session || UUIDv1()
|
const sessionId = params.session || UUIDv1()
|
||||||
const session = oneTimeSession
|
const session = oneTimeSession
|
||||||
@ -239,7 +243,7 @@ const browserRequest = async (ctx: RequestContext, params: BaseRequestAPICall) =
|
|||||||
params = mergeSessionWithParams(session, params)
|
params = mergeSessionWithParams(session, params)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const page = await setupPage(ctx, params, session.browser)
|
const page = await setupPage(ctx, params, session.browser, webBrowserUserAgent)
|
||||||
const data = await resolveChallengeWithTimeout(ctx, params, page)
|
const data = await resolveChallengeWithTimeout(ctx, params, page)
|
||||||
|
|
||||||
if (data) {
|
if (data) {
|
||||||
@ -274,7 +278,7 @@ export const routes: Routes = {
|
|||||||
if (await sessions.destroy(session)) { return ctx.successResponse('The session has been removed.') }
|
if (await sessions.destroy(session)) { return ctx.successResponse('The session has been removed.') }
|
||||||
ctx.errorResponse('This session does not exist.')
|
ctx.errorResponse('This session does not exist.')
|
||||||
},
|
},
|
||||||
'request.get': async (ctx, params: BaseRequestAPICall) => {
|
'request.get': async (ctx, params: BaseRequestAPICall, webBrowserUserAgent: string) => {
|
||||||
params.method = 'GET'
|
params.method = 'GET'
|
||||||
if (params.userAgent) {
|
if (params.userAgent) {
|
||||||
log.warn('Request parameter "userAgent" was removed in FlareSolverr v2.')
|
log.warn('Request parameter "userAgent" was removed in FlareSolverr v2.')
|
||||||
@ -282,9 +286,9 @@ export const routes: Routes = {
|
|||||||
if (params.postData) {
|
if (params.postData) {
|
||||||
return ctx.errorResponse('Cannot use "postBody" when sending a GET request.')
|
return ctx.errorResponse('Cannot use "postBody" when sending a GET request.')
|
||||||
}
|
}
|
||||||
await browserRequest(ctx, params)
|
await browserRequest(ctx, params, webBrowserUserAgent)
|
||||||
},
|
},
|
||||||
'request.post': async (ctx, params: BaseRequestAPICall) => {
|
'request.post': async (ctx, params: BaseRequestAPICall, webBrowserUserAgent: string) => {
|
||||||
params.method = 'POST'
|
params.method = 'POST'
|
||||||
if (params.userAgent) {
|
if (params.userAgent) {
|
||||||
log.warn('Request parameter "userAgent" was removed in FlareSolverr v2.')
|
log.warn('Request parameter "userAgent" was removed in FlareSolverr v2.')
|
||||||
@ -292,12 +296,12 @@ export const routes: Routes = {
|
|||||||
if (!params.postData) {
|
if (!params.postData) {
|
||||||
return ctx.errorResponse('Must send param "postBody" when sending a POST request.')
|
return ctx.errorResponse('Must send param "postBody" when sending a POST request.')
|
||||||
}
|
}
|
||||||
await browserRequest(ctx, params)
|
await browserRequest(ctx, params, webBrowserUserAgent)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function Router(ctx: RequestContext, params: BaseAPICall): Promise<void> {
|
export default async function Router(ctx: RequestContext, params: BaseAPICall, webBrowserUserAgent: string): Promise<void> {
|
||||||
const route = routes[params.cmd]
|
const route = routes[params.cmd]
|
||||||
if (route) { return await route(ctx, params) }
|
if (route) { return await route(ctx, params, webBrowserUserAgent) }
|
||||||
return ctx.errorResponse(`The command '${params.cmd}' is invalid.`)
|
return ctx.errorResponse(`The command '${params.cmd}' is invalid.`)
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ export default {
|
|||||||
puppeteerOptions.executablePath = path.join(path.dirname(process.execPath), 'chrome', exe)
|
puppeteerOptions.executablePath = path.join(path.dirname(process.execPath), 'chrome', exe)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.debug('Launching browser...')
|
log.debug('Launching web browser...')
|
||||||
|
|
||||||
// TODO: maybe access env variable?
|
// TODO: maybe access env variable?
|
||||||
// TODO: sometimes browser instances are created and not connected to correctly.
|
// TODO: sometimes browser instances are created and not connected to correctly.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user