Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 6 additions & 49 deletions impit-python/src/async_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,55 +59,12 @@ impl AsyncClient {
) -> PyResult<Self> {
let builder = ImpitBuilder::default();

let builder =
match browser {
Some(browser) => match browser.to_lowercase().as_str() {
"chrome" | "chrome124" => builder
.with_fingerprint(impit::fingerprint::database::chrome_125::fingerprint()),
"chrome100" => builder
.with_fingerprint(impit::fingerprint::database::chrome_100::fingerprint()),
"chrome101" => builder
.with_fingerprint(impit::fingerprint::database::chrome_101::fingerprint()),
"chrome104" => builder
.with_fingerprint(impit::fingerprint::database::chrome_104::fingerprint()),
"chrome107" => builder
.with_fingerprint(impit::fingerprint::database::chrome_107::fingerprint()),
"chrome110" => builder
.with_fingerprint(impit::fingerprint::database::chrome_110::fingerprint()),
"chrome116" => builder
.with_fingerprint(impit::fingerprint::database::chrome_116::fingerprint()),
"chrome125" => builder
.with_fingerprint(impit::fingerprint::database::chrome_125::fingerprint()),
"chrome131" => builder
.with_fingerprint(impit::fingerprint::database::chrome_131::fingerprint()),
"chrome136" => builder
.with_fingerprint(impit::fingerprint::database::chrome_136::fingerprint()),
"chrome142" => builder
.with_fingerprint(impit::fingerprint::database::chrome_142::fingerprint()),
"firefox128" | "firefox" => builder
.with_fingerprint(impit::fingerprint::database::firefox_128::fingerprint()),
"firefox133" => builder
.with_fingerprint(impit::fingerprint::database::firefox_133::fingerprint()),
"firefox135" => builder
.with_fingerprint(impit::fingerprint::database::firefox_135::fingerprint()),
"firefox144" => builder
.with_fingerprint(impit::fingerprint::database::firefox_144::fingerprint()),
"okhttp3" => builder
.with_fingerprint(impit::fingerprint::database::okhttp3::fingerprint()),
"okhttp" | "okhttp4" => builder
.with_fingerprint(impit::fingerprint::database::okhttp4::fingerprint()),
"okhttp5" => builder
.with_fingerprint(impit::fingerprint::database::okhttp5::fingerprint()),
"ios18" => builder
.with_fingerprint(impit::fingerprint::database::ios_18::fingerprint()),
_ => {
return Err(PyErr::new::<pyo3::exceptions::PyValueError, _>(
"Unsupported browser",
))
}
},
None => builder,
};
let builder = match browser {
Some(browser) => {
builder.with_fingerprint(crate::fingerprint::fingerprint_by_name(&browser)?)
}
None => builder,
};

let builder = match http3 {
Some(true) => builder.with_http3(),
Expand Down
51 changes: 7 additions & 44 deletions impit-python/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,52 +51,15 @@ impl Client {
cookies: Option<crate::Bound<'_, crate::PyAny>>,
headers: Option<HashMap<String, String>>,
local_address: Option<String>,
) -> Result<Self, ImpitPyError> {
) -> PyResult<Self> {
let builder = ImpitBuilder::default();

let builder =
match browser {
Some(browser) => match browser.to_lowercase().as_str() {
"chrome" | "chrome125" => builder
.with_fingerprint(impit::fingerprint::database::chrome_125::fingerprint()),
"chrome100" => builder
.with_fingerprint(impit::fingerprint::database::chrome_100::fingerprint()),
"chrome101" => builder
.with_fingerprint(impit::fingerprint::database::chrome_101::fingerprint()),
"chrome104" => builder
.with_fingerprint(impit::fingerprint::database::chrome_104::fingerprint()),
"chrome107" => builder
.with_fingerprint(impit::fingerprint::database::chrome_107::fingerprint()),
"chrome110" => builder
.with_fingerprint(impit::fingerprint::database::chrome_110::fingerprint()),
"chrome116" => builder
.with_fingerprint(impit::fingerprint::database::chrome_116::fingerprint()),
"chrome131" => builder
.with_fingerprint(impit::fingerprint::database::chrome_131::fingerprint()),
"chrome136" => builder
.with_fingerprint(impit::fingerprint::database::chrome_136::fingerprint()),
"chrome142" => builder
.with_fingerprint(impit::fingerprint::database::chrome_142::fingerprint()),
"firefox128" | "firefox" => builder
.with_fingerprint(impit::fingerprint::database::firefox_128::fingerprint()),
"firefox133" => builder
.with_fingerprint(impit::fingerprint::database::firefox_133::fingerprint()),
"firefox135" => builder
.with_fingerprint(impit::fingerprint::database::firefox_135::fingerprint()),
"firefox144" => builder
.with_fingerprint(impit::fingerprint::database::firefox_144::fingerprint()),
"okhttp3" => builder
.with_fingerprint(impit::fingerprint::database::okhttp3::fingerprint()),
"okhttp" | "okhttp4" => builder
.with_fingerprint(impit::fingerprint::database::okhttp4::fingerprint()),
"okhttp5" => builder
.with_fingerprint(impit::fingerprint::database::okhttp5::fingerprint()),
"ios18" => builder
.with_fingerprint(impit::fingerprint::database::ios_18::fingerprint()),
_ => panic!("Unsupported browser"),
},
None => builder,
};
let builder = match browser {
Some(browser) => {
builder.with_fingerprint(crate::fingerprint::fingerprint_by_name(&browser)?)
}
None => builder,
};

let builder = match http3 {
Some(true) => builder.with_http3(),
Expand Down
35 changes: 35 additions & 0 deletions impit-python/src/fingerprint.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
use impit::fingerprint::{database, BrowserFingerprint};
use pyo3::exceptions::PyValueError;
use pyo3::PyResult;

/// Resolves a browser identifier string to its [`BrowserFingerprint`].
///
/// Shared by the sync and async clients so the two bindings cannot drift apart.
pub(crate) fn fingerprint_by_name(browser: &str) -> PyResult<BrowserFingerprint> {
Ok(match browser.to_lowercase().as_str() {
"chrome" | "chrome125" => database::chrome_125::fingerprint(),
"chrome100" => database::chrome_100::fingerprint(),
"chrome101" => database::chrome_101::fingerprint(),
"chrome104" => database::chrome_104::fingerprint(),
"chrome107" => database::chrome_107::fingerprint(),
"chrome110" => database::chrome_110::fingerprint(),
"chrome116" => database::chrome_116::fingerprint(),
"chrome124" => database::chrome_124::fingerprint(),
"chrome131" => database::chrome_131::fingerprint(),
"chrome136" => database::chrome_136::fingerprint(),
"chrome142" => database::chrome_142::fingerprint(),
"firefox" | "firefox128" => database::firefox_128::fingerprint(),
"firefox133" => database::firefox_133::fingerprint(),
"firefox135" => database::firefox_135::fingerprint(),
"firefox144" => database::firefox_144::fingerprint(),
"okhttp3" => database::okhttp3::fingerprint(),
"okhttp" | "okhttp4" => database::okhttp4::fingerprint(),
"okhttp5" => database::okhttp5::fingerprint(),
"ios18" => database::ios_18::fingerprint(),
other => {
return Err(PyValueError::new_err(format!(
"Unsupported browser: {other}"
)))
}
})
}
5 changes: 3 additions & 2 deletions impit-python/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ mod async_client;
mod client;
mod cookies;
mod errors;
mod fingerprint;
mod request;
mod response;

Expand Down Expand Up @@ -102,10 +103,10 @@ fn impit(_py: Python, m: &Bound<'_, PyModule>) -> PyResult<()> {
follow_redirects: Option<bool>,
max_redirects: Option<u16>,
proxy: Option<String>,
) -> Result<response::ImpitPyResponse, errors::ImpitPyError> {
) -> PyResult<response::ImpitPyResponse> {
let client = Client::new(_py, None, None, proxy, Some(Right(USE_CLIENT_DEFAULT_SENTINEL)), None, None, follow_redirects, max_redirects, cookie_jar, cookies, None, None);

client?.$name(_py, url, content, data, headers, timeout, force_http3)
Ok(client?.$name(_py, url, content, data, headers, timeout, force_http3)?)
}

m.add_function(wrap_pyfunction!($name, m)?)?;
Expand Down
Loading