Skip to content

Commit 61bf9dc

Browse files
barjinyfe404
andauthored
feat: add new OkHTTP fingerprints (#416)
Adds profiles for emulating the fingerprints of the OkHTTP library (JVM / Android HTTP client). Closes #411 --------- Co-authored-by: yfe404 <yfe.github@protonmail.com>
1 parent 052cde9 commit 61bf9dc

10 files changed

Lines changed: 417 additions & 79 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ members = [
99

1010
[patch.crates-io]
1111
h2 = { git = "https://github.com/apify/h2", rev = "7f393a728a8db07cabb1b78d2094772b33943b9a" }
12-
rustls = { git = "https://github.com/apify/rustls", rev="c908559019c6521fbc4b487317a4ea24088a99f3" }
12+
rustls = { git = "https://github.com/apify/rustls", rev="d19ecc2b4e38978c1c3acabc98a221fa98b9314f" }
1313
tower-http = { git = "https://github.com/apify/tower-http", rev="f9efc0d9193e774d33aedc1022b922efefc22052" }
1414
hyper-util = { git = "https://github.com/apify/hyper-util", rev="9b7795dfd7158fc55e7c84b65bf1dae1d2dea67d" }
1515

impit-node/index.d.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,11 @@ export type Browser = 'chrome'|
267267
'firefox128'|
268268
'firefox133'|
269269
'firefox135'|
270-
'firefox144';
270+
'firefox144'|
271+
'okhttp'|
272+
'okhttp3'|
273+
'okhttp4'|
274+
'okhttp5';
271275

272276
export type HttpMethod = 'GET'|
273277
'POST'|

impit-node/src/impit_builder.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ pub enum Browser {
3232
Firefox133,
3333
Firefox135,
3434
Firefox144,
35+
OkHttp,
36+
OkHttp3,
37+
OkHttp4,
38+
OkHttp5,
3539
}
3640

3741
/// Options for configuring an {@link Impit} instance.
@@ -136,6 +140,9 @@ impl From<Browser> for BrowserFingerprint {
136140
Browser::Firefox133 => impit::fingerprint::database::firefox_133::fingerprint(),
137141
Browser::Firefox135 => impit::fingerprint::database::firefox_135::fingerprint(),
138142
Browser::Firefox144 => impit::fingerprint::database::firefox_144::fingerprint(),
143+
Browser::OkHttp3 => impit::fingerprint::database::okhttp3::fingerprint(),
144+
Browser::OkHttp | Browser::OkHttp4 => impit::fingerprint::database::okhttp4::fingerprint(),
145+
Browser::OkHttp5 => impit::fingerprint::database::okhttp5::fingerprint(),
139146
}
140147
}
141148
}

impit-python/src/async_client.rs

Lines changed: 47 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -59,46 +59,53 @@ impl AsyncClient {
5959
) -> PyResult<Self> {
6060
let builder = ImpitBuilder::default();
6161

62-
let builder = match browser {
63-
Some(browser) => match browser.to_lowercase().as_str() {
64-
"chrome" | "chrome124" => builder
65-
.with_fingerprint(impit::fingerprint::database::chrome_125::fingerprint()),
66-
"chrome100" => builder
67-
.with_fingerprint(impit::fingerprint::database::chrome_100::fingerprint()),
68-
"chrome101" => builder
69-
.with_fingerprint(impit::fingerprint::database::chrome_101::fingerprint()),
70-
"chrome104" => builder
71-
.with_fingerprint(impit::fingerprint::database::chrome_104::fingerprint()),
72-
"chrome107" => builder
73-
.with_fingerprint(impit::fingerprint::database::chrome_107::fingerprint()),
74-
"chrome110" => builder
75-
.with_fingerprint(impit::fingerprint::database::chrome_110::fingerprint()),
76-
"chrome116" => builder
77-
.with_fingerprint(impit::fingerprint::database::chrome_116::fingerprint()),
78-
"chrome125" => builder
79-
.with_fingerprint(impit::fingerprint::database::chrome_125::fingerprint()),
80-
"chrome131" => builder
81-
.with_fingerprint(impit::fingerprint::database::chrome_131::fingerprint()),
82-
"chrome136" => builder
83-
.with_fingerprint(impit::fingerprint::database::chrome_136::fingerprint()),
84-
"chrome142" => builder
85-
.with_fingerprint(impit::fingerprint::database::chrome_142::fingerprint()),
86-
"firefox128" | "firefox" => builder
87-
.with_fingerprint(impit::fingerprint::database::firefox_128::fingerprint()),
88-
"firefox133" => builder
89-
.with_fingerprint(impit::fingerprint::database::firefox_133::fingerprint()),
90-
"firefox135" => builder
91-
.with_fingerprint(impit::fingerprint::database::firefox_135::fingerprint()),
92-
"firefox144" => builder
93-
.with_fingerprint(impit::fingerprint::database::firefox_144::fingerprint()),
94-
_ => {
95-
return Err(PyErr::new::<pyo3::exceptions::PyValueError, _>(
96-
"Unsupported browser",
97-
))
98-
}
99-
},
100-
None => builder,
101-
};
62+
let builder =
63+
match browser {
64+
Some(browser) => match browser.to_lowercase().as_str() {
65+
"chrome" | "chrome124" => builder
66+
.with_fingerprint(impit::fingerprint::database::chrome_125::fingerprint()),
67+
"chrome100" => builder
68+
.with_fingerprint(impit::fingerprint::database::chrome_100::fingerprint()),
69+
"chrome101" => builder
70+
.with_fingerprint(impit::fingerprint::database::chrome_101::fingerprint()),
71+
"chrome104" => builder
72+
.with_fingerprint(impit::fingerprint::database::chrome_104::fingerprint()),
73+
"chrome107" => builder
74+
.with_fingerprint(impit::fingerprint::database::chrome_107::fingerprint()),
75+
"chrome110" => builder
76+
.with_fingerprint(impit::fingerprint::database::chrome_110::fingerprint()),
77+
"chrome116" => builder
78+
.with_fingerprint(impit::fingerprint::database::chrome_116::fingerprint()),
79+
"chrome125" => builder
80+
.with_fingerprint(impit::fingerprint::database::chrome_125::fingerprint()),
81+
"chrome131" => builder
82+
.with_fingerprint(impit::fingerprint::database::chrome_131::fingerprint()),
83+
"chrome136" => builder
84+
.with_fingerprint(impit::fingerprint::database::chrome_136::fingerprint()),
85+
"chrome142" => builder
86+
.with_fingerprint(impit::fingerprint::database::chrome_142::fingerprint()),
87+
"firefox128" | "firefox" => builder
88+
.with_fingerprint(impit::fingerprint::database::firefox_128::fingerprint()),
89+
"firefox133" => builder
90+
.with_fingerprint(impit::fingerprint::database::firefox_133::fingerprint()),
91+
"firefox135" => builder
92+
.with_fingerprint(impit::fingerprint::database::firefox_135::fingerprint()),
93+
"firefox144" => builder
94+
.with_fingerprint(impit::fingerprint::database::firefox_144::fingerprint()),
95+
"okhttp3" => builder
96+
.with_fingerprint(impit::fingerprint::database::okhttp3::fingerprint()),
97+
"okhttp" | "okhttp4" => builder
98+
.with_fingerprint(impit::fingerprint::database::okhttp4::fingerprint()),
99+
"okhttp5" => builder
100+
.with_fingerprint(impit::fingerprint::database::okhttp5::fingerprint()),
101+
_ => {
102+
return Err(PyErr::new::<pyo3::exceptions::PyValueError, _>(
103+
"Unsupported browser",
104+
))
105+
}
106+
},
107+
None => builder,
108+
};
102109

103110
let builder = match http3 {
104111
Some(true) => builder.with_http3(),

impit-python/src/client.rs

Lines changed: 41 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -54,40 +54,47 @@ impl Client {
5454
) -> Result<Self, ImpitPyError> {
5555
let builder = ImpitBuilder::default();
5656

57-
let builder = match browser {
58-
Some(browser) => match browser.to_lowercase().as_str() {
59-
"chrome" | "chrome125" => builder
60-
.with_fingerprint(impit::fingerprint::database::chrome_125::fingerprint()),
61-
"chrome100" => builder
62-
.with_fingerprint(impit::fingerprint::database::chrome_100::fingerprint()),
63-
"chrome101" => builder
64-
.with_fingerprint(impit::fingerprint::database::chrome_101::fingerprint()),
65-
"chrome104" => builder
66-
.with_fingerprint(impit::fingerprint::database::chrome_104::fingerprint()),
67-
"chrome107" => builder
68-
.with_fingerprint(impit::fingerprint::database::chrome_107::fingerprint()),
69-
"chrome110" => builder
70-
.with_fingerprint(impit::fingerprint::database::chrome_110::fingerprint()),
71-
"chrome116" => builder
72-
.with_fingerprint(impit::fingerprint::database::chrome_116::fingerprint()),
73-
"chrome131" => builder
74-
.with_fingerprint(impit::fingerprint::database::chrome_131::fingerprint()),
75-
"chrome136" => builder
76-
.with_fingerprint(impit::fingerprint::database::chrome_136::fingerprint()),
77-
"chrome142" => builder
78-
.with_fingerprint(impit::fingerprint::database::chrome_142::fingerprint()),
79-
"firefox128" | "firefox" => builder
80-
.with_fingerprint(impit::fingerprint::database::firefox_128::fingerprint()),
81-
"firefox133" => builder
82-
.with_fingerprint(impit::fingerprint::database::firefox_133::fingerprint()),
83-
"firefox135" => builder
84-
.with_fingerprint(impit::fingerprint::database::firefox_135::fingerprint()),
85-
"firefox144" => builder
86-
.with_fingerprint(impit::fingerprint::database::firefox_144::fingerprint()),
87-
_ => panic!("Unsupported browser"),
88-
},
89-
None => builder,
90-
};
57+
let builder =
58+
match browser {
59+
Some(browser) => match browser.to_lowercase().as_str() {
60+
"chrome" | "chrome125" => builder
61+
.with_fingerprint(impit::fingerprint::database::chrome_125::fingerprint()),
62+
"chrome100" => builder
63+
.with_fingerprint(impit::fingerprint::database::chrome_100::fingerprint()),
64+
"chrome101" => builder
65+
.with_fingerprint(impit::fingerprint::database::chrome_101::fingerprint()),
66+
"chrome104" => builder
67+
.with_fingerprint(impit::fingerprint::database::chrome_104::fingerprint()),
68+
"chrome107" => builder
69+
.with_fingerprint(impit::fingerprint::database::chrome_107::fingerprint()),
70+
"chrome110" => builder
71+
.with_fingerprint(impit::fingerprint::database::chrome_110::fingerprint()),
72+
"chrome116" => builder
73+
.with_fingerprint(impit::fingerprint::database::chrome_116::fingerprint()),
74+
"chrome131" => builder
75+
.with_fingerprint(impit::fingerprint::database::chrome_131::fingerprint()),
76+
"chrome136" => builder
77+
.with_fingerprint(impit::fingerprint::database::chrome_136::fingerprint()),
78+
"chrome142" => builder
79+
.with_fingerprint(impit::fingerprint::database::chrome_142::fingerprint()),
80+
"firefox128" | "firefox" => builder
81+
.with_fingerprint(impit::fingerprint::database::firefox_128::fingerprint()),
82+
"firefox133" => builder
83+
.with_fingerprint(impit::fingerprint::database::firefox_133::fingerprint()),
84+
"firefox135" => builder
85+
.with_fingerprint(impit::fingerprint::database::firefox_135::fingerprint()),
86+
"firefox144" => builder
87+
.with_fingerprint(impit::fingerprint::database::firefox_144::fingerprint()),
88+
"okhttp3" => builder
89+
.with_fingerprint(impit::fingerprint::database::okhttp3::fingerprint()),
90+
"okhttp" | "okhttp4" => builder
91+
.with_fingerprint(impit::fingerprint::database::okhttp4::fingerprint()),
92+
"okhttp5" => builder
93+
.with_fingerprint(impit::fingerprint::database::okhttp5::fingerprint()),
94+
_ => panic!("Unsupported browser"),
95+
},
96+
None => builder,
97+
};
9198

9299
let builder = match http3 {
93100
Some(true) => builder.with_http3(),

impit/src/fingerprint/database.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
55
mod chrome;
66
mod firefox;
7+
mod okhttp;
78

89
pub use chrome::{
910
chrome_100, chrome_101, chrome_104, chrome_107, chrome_110, chrome_116, chrome_124, chrome_125,
1011
chrome_131, chrome_133, chrome_136, chrome_142,
1112
};
1213
pub use firefox::{firefox_128, firefox_133, firefox_135, firefox_144};
14+
pub use okhttp::{okhttp3, okhttp4, okhttp5};

0 commit comments

Comments
 (0)