fixed a bug in requester
This commit is contained in:
@@ -136,6 +136,13 @@ impl Requester {
|
||||
.unwrap_or_else(|| "none".to_string())
|
||||
}
|
||||
|
||||
fn looks_like_cloudflare_challenge(body: &str) -> bool {
|
||||
body.contains("Just a moment...")
|
||||
|| body.contains("cf-turnstile-response")
|
||||
|| body.contains("challenges.cloudflare.com")
|
||||
|| body.contains("Enable JavaScript and cookies to continue")
|
||||
}
|
||||
|
||||
fn jina_mirror_url(url: &str) -> Option<String> {
|
||||
if url.trim().is_empty() {
|
||||
return None;
|
||||
@@ -542,8 +549,47 @@ impl Requester {
|
||||
response.status()
|
||||
);
|
||||
if response.status().is_success() || response.status().as_u16() == 404 {
|
||||
let status = response.status();
|
||||
let body = response.text().await?;
|
||||
if status.is_success() && Self::looks_like_cloudflare_challenge(&body) {
|
||||
crate::flow_debug!(
|
||||
"trace={} requester direct response looks like cloudflare challenge url={} using_jina_fallback=true",
|
||||
_trace_id,
|
||||
crate::util::flow_debug::preview(url, 120)
|
||||
);
|
||||
match jina_handle.await {
|
||||
Ok(Ok(jina_body)) => {
|
||||
if Self::looks_like_cloudflare_challenge(&jina_body) {
|
||||
crate::flow_debug!(
|
||||
"trace={} requester jina fallback also returned cloudflare challenge url={}",
|
||||
_trace_id,
|
||||
crate::util::flow_debug::preview(url, 120)
|
||||
);
|
||||
} else {
|
||||
return Ok(jina_body);
|
||||
}
|
||||
}
|
||||
Ok(Err(_jina_error)) => {
|
||||
crate::flow_debug!(
|
||||
"trace={} requester jina fallback failed after cloudflare challenge url={} error={}",
|
||||
_trace_id,
|
||||
crate::util::flow_debug::preview(url, 120),
|
||||
crate::util::flow_debug::preview(&_jina_error.to_string(), 160)
|
||||
);
|
||||
}
|
||||
Err(_join_error) => {
|
||||
crate::flow_debug!(
|
||||
"trace={} requester jina task join failed after cloudflare challenge url={} error={}",
|
||||
_trace_id,
|
||||
crate::util::flow_debug::preview(url, 120),
|
||||
crate::util::flow_debug::preview(&_join_error.to_string(), 160)
|
||||
);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
jina_handle.abort();
|
||||
return Ok(response.text().await?);
|
||||
return Ok(body);
|
||||
}
|
||||
if response.status().as_u16() == 429 {
|
||||
crate::flow_debug!(
|
||||
@@ -561,7 +607,17 @@ impl Requester {
|
||||
response.status()
|
||||
);
|
||||
match jina_handle.await {
|
||||
Ok(Ok(body)) => return Ok(body),
|
||||
Ok(Ok(body)) => {
|
||||
if Self::looks_like_cloudflare_challenge(&body) {
|
||||
crate::flow_debug!(
|
||||
"trace={} requester jina fallback returned cloudflare challenge url={}",
|
||||
_trace_id,
|
||||
crate::util::flow_debug::preview(url, 120)
|
||||
);
|
||||
} else {
|
||||
return Ok(body);
|
||||
}
|
||||
}
|
||||
Ok(Err(_error)) => {
|
||||
crate::flow_debug!(
|
||||
"trace={} requester jina fallback failed url={} error={}",
|
||||
|
||||
Reference in New Issue
Block a user