Skip to content

Commit

Permalink
feat(impersonate): Add Safari iPad 18 impersonate (#10)
Browse files Browse the repository at this point in the history
  • Loading branch information
0x676e67 authored Sep 23, 2024
1 parent fecd878 commit 304b1bd
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/tls/impersonate/chrome/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ pub mod v124;
pub mod v126;
pub mod v127;
pub mod v128;
pub mod v129;
pub mod v129;
3 changes: 3 additions & 0 deletions src/tls/impersonate/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ pub fn tls_settings(ver: Impersonate) -> TlsResult<ImpersonateSettings> {
Safari17_4_1 => safari17_4_1::get_settings,
Safari17_5 => safari17_5::get_settings,
Safari18 => safari18::get_settings,
SafariIPad18 => safari_ipad_18::get_settings,

// OkHttp
OkHttp3_9 => okhttp3_9::get_settings,
Expand Down Expand Up @@ -142,6 +143,7 @@ pub enum Impersonate {
Safari17_4_1,
Safari17_5,
Safari18,
SafariIPad18,

// OkHttp
OkHttp3_9,
Expand Down Expand Up @@ -200,6 +202,7 @@ impl FromStr for Impersonate {
"safari_17.4.1" => Ok(Safari17_4_1),
"safari_17.5" => Ok(Safari17_5),
"safari_18" => Ok(Safari18),
"safari_ipad_18" => Ok(SafariIPad18),

// OkHttp
"okhttp_3.9" => Ok(OkHttp3_9),
Expand Down
1 change: 1 addition & 0 deletions src/tls/impersonate/safari/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ pub mod safari18;
pub mod safari_ios_16_5;
pub mod safari_ios_17_2;
pub mod safari_ios_17_4_1;
pub mod safari_ipad_18;
mod tls;
50 changes: 50 additions & 0 deletions src/tls/impersonate/safari/safari_ipad_18.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
use super::http2::{NEW_HEADERS_PSEUDO_ORDER, NEW_HEADER_PRORIORITY, NEW_SETTINGS_ORDER};
use super::tls::{SafariTlsSettings, CIPHER_LIST};
use crate::tls::impersonate::{http2::Http2Settings, ImpersonateSettings};
use crate::tls::TlsResult;
use http::{
header::{ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, USER_AGENT},
HeaderMap, HeaderValue,
};

pub(crate) fn get_settings() -> TlsResult<ImpersonateSettings> {
Ok(ImpersonateSettings::builder()
.tls(
SafariTlsSettings::builder()
.cipher_list(&CIPHER_LIST)
.build()
.try_into()?,
)
.http2(
Http2Settings::builder()
.initial_stream_window_size(2097152)
.initial_connection_window_size(10485760)
.max_concurrent_streams(100)
.enable_push(false)
.unknown_setting8(true)
.unknown_setting9(true)
.headers_priority(*NEW_HEADER_PRORIORITY)
.headers_pseudo_order(*NEW_HEADERS_PSEUDO_ORDER)
.settings_order(NEW_SETTINGS_ORDER.to_vec())
.build(),
)
.headers(Box::new(header_initializer))
.build())
}

fn header_initializer(headers: &mut HeaderMap) {
headers.insert("sec-fetch-dest", HeaderValue::from_static("document"));
headers.insert(USER_AGENT, HeaderValue::from_static("Mozilla/5.0 (iPad; CPU OS 18_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"));
headers.insert(
ACCEPT,
HeaderValue::from_static("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"),
);
headers.insert("sec-fetch-site", HeaderValue::from_static("some-origin"));
headers.insert("sec-fetch-mode", HeaderValue::from_static("navigate"));
headers.insert(ACCEPT_LANGUAGE, HeaderValue::from_static("en-US,en;q=0.9"));
headers.insert("priority", HeaderValue::from_static("u=0, i"));
headers.insert(
ACCEPT_ENCODING,
HeaderValue::from_static("gzip, deflate, br"),
);
}

0 comments on commit 304b1bd

Please sign in to comment.