wreq 1.2.13 → 1.2.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45253084ba060aa37efcdd71fdea4302d55a8ca658b9945385dd632a241452f9
4
- data.tar.gz: 817dd6fd547b6f1f5dcf074f707487cf1efb6b7f42324c24a27a8afa444f2868
3
+ metadata.gz: cb297a1d40048f6a29833fe7eb1a8248e1460825be97802d82aece4e922b1b6a
4
+ data.tar.gz: eb8042d063690fa100cc63249f041e17724b5e8113c0611acb8c819d4ecc2afd
5
5
  SHA512:
6
- metadata.gz: 1af6ea1ce815b1b64ff19ea238831b57176df435b2d307f3050a4b33b977370b56891d1c56c334a173fc5e11e694527fe30a7ebb418720033ccffd484dc5381c
7
- data.tar.gz: 88a15b449a5e6fbeb62a57d73fa28d8734d5453c0a5ecfca0d295f2b33f4d23481ad34bdae0acf8d78d622c24a98f5ed2f43c35fb0d24d1d2752aaa88467d0f5
6
+ metadata.gz: 3e781f223de45ef1ad4b92c17d2af10e2060a2de89e940a69d5a4cab4fd3a8e3ec96c96d1553ab22bc782304596a2bc15403124b324e0dbc4fab41c48256212e
7
+ data.tar.gz: ca634efa4d997c7f96099929ff3b5163cc2fb236d9ba49f8502a99811dda441636ed05b1d05c89e58e1ee4e8954a97a47420963fe4f568c7cd4682f194c6adf2
data/Cargo.lock CHANGED
@@ -113,7 +113,7 @@ dependencies = [
113
113
  [[package]]
114
114
  name = "btls"
115
115
  version = "0.5.6"
116
- source = "git+https://github.com/0x676e67/btls?branch=demo%2Fmerge-upstream-boring-20260616#2c1026a045e31454e841f96c6dfb594d5a4e4752"
116
+ source = "git+https://github.com/0x676e67/btls?rev=de7ab84fdb58641a2bdfdf9d8ebd7db1dcf4b29b#de7ab84fdb58641a2bdfdf9d8ebd7db1dcf4b29b"
117
117
  dependencies = [
118
118
  "bitflags",
119
119
  "btls-sys",
@@ -125,7 +125,7 @@ dependencies = [
125
125
  [[package]]
126
126
  name = "btls-sys"
127
127
  version = "0.5.6"
128
- source = "git+https://github.com/0x676e67/btls?branch=demo%2Fmerge-upstream-boring-20260616#2c1026a045e31454e841f96c6dfb594d5a4e4752"
128
+ source = "git+https://github.com/0x676e67/btls?rev=de7ab84fdb58641a2bdfdf9d8ebd7db1dcf4b29b#de7ab84fdb58641a2bdfdf9d8ebd7db1dcf4b29b"
129
129
  dependencies = [
130
130
  "bindgen",
131
131
  "cmake",
@@ -166,6 +166,15 @@ version = "1.0.4"
166
166
  source = "registry+https://github.com/rust-lang/crates.io-index"
167
167
  checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
168
168
 
169
+ [[package]]
170
+ name = "chromium-roots"
171
+ version = "0.1.1"
172
+ source = "registry+https://github.com/rust-lang/crates.io-index"
173
+ checksum = "229b200495e6cf4d4b599a1884c30f5af57898604e6c0bd94a217295c0d1df69"
174
+ dependencies = [
175
+ "rustls-pki-types",
176
+ ]
177
+
169
178
  [[package]]
170
179
  name = "clang-sys"
171
180
  version = "1.9.1"
@@ -1270,9 +1279,9 @@ dependencies = [
1270
1279
 
1271
1280
  [[package]]
1272
1281
  name = "tower-http"
1273
- version = "0.6.11"
1282
+ version = "0.7.1"
1274
1283
  source = "registry+https://github.com/rust-lang/crates.io-index"
1275
- checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840"
1284
+ checksum = "08a05a66a4fdd61cbbe0a1d755ffe0ca6aba159dd4820936a0ff8a8278245b9c"
1276
1285
  dependencies = [
1277
1286
  "async-compression",
1278
1287
  "bitflags",
@@ -1281,6 +1290,7 @@ dependencies = [
1281
1290
  "http",
1282
1291
  "http-body",
1283
1292
  "http-body-util",
1293
+ "percent-encoding",
1284
1294
  "pin-project-lite",
1285
1295
  "tokio",
1286
1296
  "tokio-util",
@@ -1371,15 +1381,6 @@ version = "0.11.1+wasi-snapshot-preview1"
1371
1381
  source = "registry+https://github.com/rust-lang/crates.io-index"
1372
1382
  checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
1373
1383
 
1374
- [[package]]
1375
- name = "webpki-root-certs"
1376
- version = "1.0.9"
1377
- source = "registry+https://github.com/rust-lang/crates.io-index"
1378
- checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b"
1379
- dependencies = [
1380
- "rustls-pki-types",
1381
- ]
1382
-
1383
1384
  [[package]]
1384
1385
  name = "winapi"
1385
1386
  version = "0.3.9"
@@ -1419,12 +1420,13 @@ dependencies = [
1419
1420
 
1420
1421
  [[package]]
1421
1422
  name = "wreq"
1422
- version = "6.0.0-rc.29"
1423
- source = "git+https://github.com/0x676e67/wreq?rev=12ccf64bb00e79db6eabd4bc3ccf82871d3eb5a5#12ccf64bb00e79db6eabd4bc3ccf82871d3eb5a5"
1423
+ version = "0.16.1"
1424
+ source = "git+https://github.com/0x676e67/wreq?rev=abd421d16dd48b3c2d7fb812f185eec3c6ec3132#abd421d16dd48b3c2d7fb812f185eec3c6ec3132"
1424
1425
  dependencies = [
1425
1426
  "btls",
1426
1427
  "btls-sys",
1427
1428
  "bytes",
1429
+ "chromium-roots",
1428
1430
  "cookie",
1429
1431
  "encoding_rs",
1430
1432
  "futures-util",
@@ -1451,7 +1453,6 @@ dependencies = [
1451
1453
  "tower",
1452
1454
  "tower-http",
1453
1455
  "url",
1454
- "webpki-root-certs",
1455
1456
  "wreq-proto",
1456
1457
  "wreq-rt",
1457
1458
  ]
@@ -1489,7 +1490,7 @@ dependencies = [
1489
1490
 
1490
1491
  [[package]]
1491
1492
  name = "wreq-ruby"
1492
- version = "1.2.13"
1493
+ version = "1.2.15"
1493
1494
  dependencies = [
1494
1495
  "arc-swap",
1495
1496
  "bytes",
@@ -1516,6 +1517,7 @@ name = "wreq-util"
1516
1517
  version = "3.0.0-rc.14"
1517
1518
  dependencies = [
1518
1519
  "brotli",
1520
+ "chromium-roots",
1519
1521
  "flate2",
1520
1522
  "typed-builder",
1521
1523
  "wreq",
data/Cargo.toml CHANGED
@@ -5,8 +5,8 @@ authors = ["SearchApi <support@searchapi.io>"]
5
5
  homepage = "https://github.com/SearchApi/wreq-ruby"
6
6
  repository = "https://github.com/SearchApi/wreq-ruby"
7
7
  edition = "2024"
8
- version = "1.2.13"
9
- rust-version = "1.95"
8
+ version = "1.2.15"
9
+ rust-version = "1.98"
10
10
 
11
11
  [lib]
12
12
  crate-type = ["cdylib"]
@@ -17,7 +17,7 @@ name = "wreq_ruby"
17
17
  magnus = { version = "0.8.2", features = ["bytes"] }
18
18
  rb-sys = { version = "0.9.128", default-features = false }
19
19
  tokio = { version = "1.53.1", features = ["full"] }
20
- wreq = { version = "6.0.0-rc", features = [
20
+ wreq = { version = "0.16.1", features = [
21
21
  "query",
22
22
  "form",
23
23
  "json",
@@ -65,7 +65,7 @@ strip = true
65
65
 
66
66
  [patch.crates-io]
67
67
  http2 = { git = "https://github.com/0x676e67/http2", rev = "b413a92b2e1fe7e2ea1b7be78e75b872386fdfa0" }
68
- btls = { git = "https://github.com/0x676e67/btls", branch = "demo/merge-upstream-boring-20260616" }
69
- btls-sys = { git = "https://github.com/0x676e67/btls", branch = "demo/merge-upstream-boring-20260616" }
70
- wreq = { git = "https://github.com/0x676e67/wreq", rev = "12ccf64bb00e79db6eabd4bc3ccf82871d3eb5a5" }
68
+ btls = { git = "https://github.com/0x676e67/btls", rev = "de7ab84fdb58641a2bdfdf9d8ebd7db1dcf4b29b" }
69
+ btls-sys = { git = "https://github.com/0x676e67/btls", rev = "de7ab84fdb58641a2bdfdf9d8ebd7db1dcf4b29b" }
70
+ wreq = { git = "https://github.com/0x676e67/wreq", rev = "abd421d16dd48b3c2d7fb812f185eec3c6ec3132" }
71
71
  wreq-util = { path = "crates/wreq-util" }
data/README.md CHANGED
@@ -91,9 +91,9 @@ Most browser device models share identical TLS and HTTP/2 configurations, differ
91
91
 
92
92
  | **Browser** | **Versions** |
93
93
  | ----------- | ------------ |
94
- | **Chrome** | `Chrome100`, `Chrome101`, `Chrome104`, `Chrome105`, `Chrome106`, `Chrome107`, `Chrome108`, `Chrome109`, `Chrome110`, `Chrome114`, `Chrome116`, `Chrome117`, `Chrome118`, `Chrome119`, `Chrome120`, `Chrome123`, `Chrome124`, `Chrome126`, `Chrome127`, `Chrome128`, `Chrome129`, `Chrome130`, `Chrome131`, `Chrome132`, `Chrome133`, `Chrome134`, `Chrome135`, `Chrome136`, `Chrome137`, `Chrome138`, `Chrome139`, `Chrome140`, `Chrome141`, `Chrome142`, `Chrome143`, `Chrome144`, `Chrome145`, `Chrome146`, `Chrome147`, `Chrome148`, `Chrome149`, `Chrome150`, `Chrome151` |
94
+ | **Chrome** | `Chrome100`, `Chrome101`, `Chrome104`, `Chrome105`, `Chrome106`, `Chrome107`, `Chrome108`, `Chrome109`, `Chrome110`, `Chrome114`, `Chrome116`, `Chrome117`, `Chrome118`, `Chrome119`, `Chrome120`, `Chrome123`, `Chrome124`, `Chrome126`, `Chrome127`, `Chrome128`, `Chrome129`, `Chrome130`, `Chrome131`, `Chrome132`, `Chrome133`, `Chrome134`, `Chrome135`, `Chrome136`, `Chrome137`, `Chrome138`, `Chrome139`, `Chrome140`, `Chrome141`, `Chrome142`, `Chrome143`, `Chrome144`, `Chrome145`, `Chrome146`, `Chrome147`, `Chrome148`, `Chrome149`, `Chrome150`, `Chrome151`, `Chrome152`, `Chrome153` |
95
95
  | **Edge** | `Edge101`, `Edge122`, `Edge127`, `Edge131`, `Edge134`, `Edge135`, `Edge136`, `Edge137`, `Edge138`, `Edge139`, `Edge140`, `Edge141`, `Edge142`, `Edge143`, `Edge144`, `Edge145`, `Edge146`, `Edge147`, `Edge148` |
96
- | **Firefox** | `Firefox109`, `Firefox117`, `Firefox128`, `Firefox133`, `Firefox135`, `FirefoxPrivate135`, `FirefoxAndroid135`, `Firefox136`, `FirefoxPrivate136`, `Firefox139`, `Firefox142`, `Firefox143`, `Firefox144`, `Firefox145`, `Firefox146`, `Firefox147`, `Firefox148`, `Firefox149`, `Firefox150`, `Firefox151` |
96
+ | **Firefox** | `Firefox109`, `Firefox117`, `Firefox128`, `Firefox133`, `Firefox135`, `FirefoxPrivate135`, `FirefoxAndroid135`, `Firefox136`, `FirefoxPrivate136`, `Firefox139`, `Firefox142`, `Firefox143`, `Firefox144`, `Firefox145`, `Firefox146`, `Firefox147`, `Firefox148`, `Firefox149`, `Firefox150`, `Firefox151`, `Firefox152` |
97
97
  | **Safari** | `Safari15_3`, `Safari15_5`, `Safari15_6_1`, `Safari16`, `Safari16_5`, `Safari17_0`, `Safari17_2_1`, `Safari17_4_1`, `Safari17_5`, `Safari17_6`, `Safari18`, `Safari18_2`, `Safari18_3`, `Safari18_3_1`, `Safari18_5`, `Safari26`, `Safari26_1`, `Safari26_2`, `SafariIos16_5`, `SafariIos17_2`, `SafariIos17_4_1`, `SafariIos18_1_1`, `SafariIos26`, `SafariIos26_2`, `SafariIPad18`, `SafariIPad26`, `SafariIpad26_2` |
98
98
  | **OkHttp** | `Opera116`, `Opera117`, `Opera118`, `Opera119`, `Opera120`, `Opera121`, `Opera122`, `Opera123`, `Opera124`, `Opera125`, `Opera126`, `Opera127`, `Opera128`, `Opera129`, `Opera130` |
99
99
  | **Opera** | `Opera116`, `Opera117`, `Opera118`, `Opera119` |
@@ -10,6 +10,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
10
10
  ### Added
11
11
 
12
12
  - *(emulate)* Add Chrome 151 profile.
13
+ - *(emulate)* Add Chrome 152 profile.
14
+ - *(emulate)* Add Chrome 153 profile.
15
+ - *(emulate)* Add Firefox 152 profile.
16
+
17
+ ### Fixed
18
+
19
+ - *(emulate)* Fix Firefox 150 and 151 cipher suite lists.
13
20
 
14
21
  ## [3.0.0-rc.14](https://github.com/0x676e67/wreq-util/compare/v3.0.0-rc.13...v3.0.0-rc.14) - 2026-07-04
15
22
 
@@ -9,7 +9,7 @@ version = "3.0.0-rc.14"
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
11
11
  edition = "2024"
12
- rust-version = "1.85"
12
+ rust-version = "1.98"
13
13
 
14
14
  [package.metadata.docs.rs]
15
15
  all-features = true
@@ -22,14 +22,21 @@ default = ["emulation"]
22
22
  tokio-rt = ["wreq/tokio-rt"]
23
23
  compio-rt = ["wreq/compio-rt"]
24
24
 
25
- emulation = ["dep:typed-builder", "dep:brotli", "dep:flate2", "dep:zstd"]
25
+ emulation = [
26
+ "dep:typed-builder",
27
+ "dep:brotli",
28
+ "dep:flate2",
29
+ "dep:zstd",
30
+ "dep:chromium-roots",
31
+ "wreq/chromium-roots",
32
+ ]
26
33
  emulation-serde = ["dep:serde"]
27
34
  emulation-compression = []
28
35
 
29
36
  tower-delay = ["dep:tower", "dep:pin-project-lite", "tokio/time"]
30
37
 
31
38
  [dependencies]
32
- wreq = { version = "6.0.0-rc", default-features = false }
39
+ wreq = { version = "0.16.1", default-features = false }
33
40
 
34
41
  # Optional deps...
35
42
 
@@ -38,6 +45,7 @@ tokio = { version = "1.52.1", default-features = false, optional = true }
38
45
  tower = { version = "0.5.2", default-features = false, optional = true }
39
46
  typed-builder = { version = "0.23.2", optional = true }
40
47
  pin-project-lite = { version = "0.2.17", optional = true }
48
+ chromium-roots = { version = "0.1.1", optional = true }
41
49
 
42
50
  ## Compression algorithms
43
51
  brotli = { version = "8.0.2", optional = true }
@@ -45,7 +53,7 @@ flate2 = { version = "1.1.9", optional = true }
45
53
  zstd = { version = "0.13.3", optional = true }
46
54
 
47
55
  [dev-dependencies]
48
- wreq = "6.0.0-rc"
56
+ wreq = "0.16.1"
49
57
  tokio = { version = "1.48.0", features = ["full"] }
50
58
  hyper = { version = "1.10.1", default-features = false, features = [
51
59
  "http1",
@@ -131,6 +131,13 @@ macro_rules! header_chrome_accept_encoding {
131
131
  );
132
132
  $headers.insert(ACCEPT_LANGUAGE, HeaderValue::from_static("en-US,en;q=0.9"));
133
133
  };
134
+ (zstd_only, $headers:expr) => {
135
+ #[cfg(feature = "emulation-compression")]
136
+ $headers.insert(
137
+ ACCEPT_ENCODING,
138
+ HeaderValue::from_static("gzip, deflate, br, zstd"),
139
+ );
140
+ };
134
141
  }
135
142
 
136
143
  macro_rules! header_firefox_sec_fetch {
@@ -72,3 +72,31 @@ pub fn header_initializer_with_zstd_priority(
72
72
  );
73
73
  headers
74
74
  }
75
+
76
+ pub fn header_initializer_chrome152(
77
+ sec_ch_ua: &'static str,
78
+ ua: &'static str,
79
+ emulation_os: Platform,
80
+ ) -> HeaderMap {
81
+ let mut headers = HeaderMap::new();
82
+ header_chrome_sec_ch_ua!(
83
+ headers,
84
+ sec_ch_ua,
85
+ emulation_os.platform(),
86
+ emulation_os.is_mobile()
87
+ );
88
+ headers.insert(ACCEPT_LANGUAGE, HeaderValue::from_static("en-US,en;q=0.9"));
89
+ headers.insert(
90
+ HeaderName::from_static("upgrade-insecure-requests"),
91
+ HeaderValue::from_static("1"),
92
+ );
93
+ header_chrome_ua!(headers, ua);
94
+ header_chrome_accept!(headers);
95
+ header_chrome_sec_fetch!(headers);
96
+ header_chrome_accept_encoding!(zstd_only, headers);
97
+ headers.insert(
98
+ HeaderName::from_static("priority"),
99
+ HeaderValue::from_static("u=0, i"),
100
+ );
101
+ headers
102
+ }
@@ -49,6 +49,17 @@ macro_rules! tls_options {
49
49
  .sigalgs_list($sigalgs)
50
50
  .alps_use_new_codepoint(true))
51
51
  };
52
+ (9, $curves:expr) => {
53
+ tls_options!(@build ChromeTlsConfig::builder()
54
+ .permute_extensions(true)
55
+ .enable_ech_grease(true)
56
+ .pre_shared_key(true)
57
+ .curves($curves)
58
+ .sigalgs_list(NEW_SIGALGS_LIST)
59
+ .trust_anchors(CHROME_TRUST_ANCHORS)
60
+ .grease_sigalgs_enabled(true)
61
+ .alps_use_new_codepoint(true))
62
+ };
52
63
  }
53
64
 
54
65
  pub const CURVES_1: &str = join!(":", "X25519", "P-256", "P-384");
@@ -101,6 +112,9 @@ pub const NEW_SIGALGS_LIST: &str = join!(
101
112
  "rsa_pkcs1_sha512"
102
113
  );
103
114
 
115
+ // Encoded IDs and wreq's Chromium root store come from the same root set.
116
+ pub(super) const CHROME_TRUST_ANCHORS: &[u8] = &chromium_roots::encoded_trust_anchor_ids();
117
+
104
118
  pub const CERTIFICATE_COMPRESSORS: &[&'static dyn CertificateCompressor] = &[&BrotliCompressor];
105
119
 
106
120
  #[derive(TypedBuilder)]
@@ -128,11 +142,17 @@ pub struct ChromeTlsConfig {
128
142
 
129
143
  #[builder(default = false, setter(into))]
130
144
  pre_shared_key: bool,
145
+
146
+ #[builder(default, setter(strip_option))]
147
+ trust_anchors: Option<&'static [u8]>,
148
+
149
+ #[builder(default, setter(strip_option))]
150
+ grease_sigalgs_enabled: Option<bool>,
131
151
  }
132
152
 
133
153
  impl From<ChromeTlsConfig> for TlsOptions {
134
154
  fn from(val: ChromeTlsConfig) -> Self {
135
- TlsOptions::builder()
155
+ let builder = TlsOptions::builder()
136
156
  .grease_enabled(true)
137
157
  .enable_ocsp_stapling(true)
138
158
  .enable_signed_cert_timestamps(true)
@@ -147,7 +167,17 @@ impl From<ChromeTlsConfig> for TlsOptions {
147
167
  .alps_protocols([val.alps_protos])
148
168
  .alps_use_new_codepoint(val.alps_use_new_codepoint)
149
169
  .aes_hw_override(true)
150
- .certificate_compressors(CERTIFICATE_COMPRESSORS)
151
- .build()
170
+ .certificate_compressors(CERTIFICATE_COMPRESSORS);
171
+ let builder = if let Some(trust_anchors) = val.trust_anchors {
172
+ builder.trust_anchors(trust_anchors)
173
+ } else {
174
+ builder
175
+ };
176
+ let builder = if let Some(enabled) = val.grease_sigalgs_enabled {
177
+ builder.grease_sigalgs_enabled(enabled)
178
+ } else {
179
+ builder
180
+ };
181
+ builder.build()
152
182
  }
153
183
  }
@@ -1862,6 +1862,73 @@ mod_generator!(
1862
1862
  ]
1863
1863
  );
1864
1864
 
1865
+ mod_generator!(
1866
+ v152,
1867
+ tls_options!(9, CURVES_3),
1868
+ http2_options!(3),
1869
+ header_initializer_chrome152,
1870
+ [
1871
+ (
1872
+ MacOS,
1873
+ r#""Chromium";v="152", "Not?A_Brand";v="24", "Google Chrome";v="152""#,
1874
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36"
1875
+ ),
1876
+ (
1877
+ Linux,
1878
+ r#""Chromium";v="152", "Not?A_Brand";v="24", "Google Chrome";v="152""#,
1879
+ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36"
1880
+ ),
1881
+ (
1882
+ Android,
1883
+ r#""Chromium";v="152", "Not?A_Brand";v="24", "Google Chrome";v="152""#,
1884
+ "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Mobile Safari/537.36"
1885
+ ),
1886
+ (
1887
+ Windows,
1888
+ r#""Chromium";v="152", "Not?A_Brand";v="24", "Google Chrome";v="152""#,
1889
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36"
1890
+ ),
1891
+ (
1892
+ IOS,
1893
+ r#""Chromium";v="152", "Not?A_Brand";v="24", "Google Chrome";v="152""#,
1894
+ "Mozilla/5.0 (iPhone; CPU iPhone OS 18_7_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/152.0.0.0 Mobile/15E148 Safari/604.1"
1895
+ )
1896
+ ]
1897
+ );
1898
+
1899
+ mod_generator!(
1900
+ v153,
1901
+ v152::build_emulation,
1902
+ header_initializer_with_zstd_priority,
1903
+ [
1904
+ (
1905
+ MacOS,
1906
+ r#""Google Chrome";v="153", "Not_A Brand";v="8", "Chromium";v="153""#,
1907
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.0.0 Safari/537.36"
1908
+ ),
1909
+ (
1910
+ Linux,
1911
+ r#""Google Chrome";v="153", "Not_A Brand";v="8", "Chromium";v="153""#,
1912
+ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.0.0 Safari/537.36"
1913
+ ),
1914
+ (
1915
+ Android,
1916
+ r#""Google Chrome";v="153", "Not_A Brand";v="8", "Chromium";v="153""#,
1917
+ "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.0.0 Mobile Safari/537.36"
1918
+ ),
1919
+ (
1920
+ Windows,
1921
+ r#""Google Chrome";v="153", "Not_A Brand";v="8", "Chromium";v="153""#,
1922
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.0.0 Safari/537.36"
1923
+ ),
1924
+ (
1925
+ IOS,
1926
+ r#""Google Chrome";v="153", "Not_A Brand";v="8", "Chromium";v="153""#,
1927
+ "Mozilla/5.0 (iPhone; CPU iPhone OS 18_7_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/153.0.8010.24 Mobile/15E148 Safari/604.1"
1928
+ )
1929
+ ]
1930
+ );
1931
+
1865
1932
  mod_generator!(
1866
1933
  edge143,
1867
1934
  v132::build_emulation,
@@ -124,6 +124,26 @@ pub const CIPHER_LIST_2: &str = join!(
124
124
  "TLS_RSA_WITH_AES_256_CBC_SHA"
125
125
  );
126
126
 
127
+ pub const CIPHER_LIST_3: &str = join!(
128
+ ":",
129
+ "TLS_AES_128_GCM_SHA256",
130
+ "TLS_CHACHA20_POLY1305_SHA256",
131
+ "TLS_AES_256_GCM_SHA384",
132
+ "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
133
+ "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
134
+ "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
135
+ "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
136
+ "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
137
+ "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
138
+ "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
139
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
140
+ "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
141
+ "TLS_RSA_WITH_AES_128_GCM_SHA256",
142
+ "TLS_RSA_WITH_AES_256_GCM_SHA384",
143
+ "TLS_RSA_WITH_AES_128_CBC_SHA",
144
+ "TLS_RSA_WITH_AES_256_CBC_SHA"
145
+ );
146
+
127
147
  pub const SIGALGS_LIST: &str = join!(
128
148
  ":",
129
149
  "ecdsa_secp256r1_sha256",
@@ -463,7 +463,8 @@ mod_generator!(
463
463
 
464
464
  mod_generator!(
465
465
  ff150,
466
- ff135::build_emulation,
466
+ tls_options!(4, CIPHER_LIST_3, CURVES_2, KEY_SHARES_2),
467
+ http2_options!(1),
467
468
  header_initializer_with_zstd,
468
469
  [
469
470
  (
@@ -491,7 +492,7 @@ mod_generator!(
491
492
 
492
493
  mod_generator!(
493
494
  ff151,
494
- ff135::build_emulation,
495
+ ff150::build_emulation,
495
496
  header_initializer_with_zstd,
496
497
  [
497
498
  (
@@ -516,3 +517,31 @@ mod_generator!(
516
517
  )
517
518
  ]
518
519
  );
520
+
521
+ mod_generator!(
522
+ ff152,
523
+ ff150::build_emulation,
524
+ header_initializer_with_zstd,
525
+ [
526
+ (
527
+ Windows,
528
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:152.0) Gecko/20100101 Firefox/152.0"
529
+ ),
530
+ (
531
+ MacOS,
532
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:152.0) Gecko/20100101 Firefox/152.0"
533
+ ),
534
+ (
535
+ Linux,
536
+ "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:152.0) Gecko/20100101 Firefox/152.0"
537
+ ),
538
+ (
539
+ Android,
540
+ "Mozilla/5.0 (Android 13; Mobile; rv:152.0) Gecko/152.0 Firefox/152.0"
541
+ ),
542
+ (
543
+ IOS,
544
+ "Mozilla/5.0 (iPhone; CPU iPhone OS 18_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/152.0 Mobile/15E148 Safari/605.1.15"
545
+ )
546
+ ]
547
+ );
@@ -62,6 +62,8 @@ define_enum!(
62
62
  Chrome149 => ("chrome_149", v149::emulation),
63
63
  Chrome150 => ("chrome_150", v150::emulation),
64
64
  Chrome151 => ("chrome_151", v151::emulation),
65
+ Chrome152 => ("chrome_152", v152::emulation),
66
+ Chrome153 => ("chrome_153", v153::emulation),
65
67
 
66
68
  // Edge versions
67
69
  Edge101 => ("edge_101", edge101::emulation),
@@ -123,6 +125,7 @@ define_enum!(
123
125
  Firefox149 => ("firefox_149", ff149::emulation),
124
126
  Firefox150 => ("firefox_150", ff150::emulation),
125
127
  Firefox151 => ("firefox_151", ff151::emulation),
128
+ Firefox152 => ("firefox_152", ff152::emulation),
126
129
 
127
130
  // Safari versions
128
131
  SafariIos17_2 => ("safari_ios_17.2", safari_ios_17_2::emulation),
@@ -275,3 +275,23 @@ test_emulation!(
275
275
  ["t13d1516h2_8daaf6152771_806a8c22fdea"],
276
276
  "52d84b11737d980aef856699f885ca86"
277
277
  );
278
+
279
+ test_emulation!(
280
+ test_chrome152,
281
+ Emulation::Chrome152,
282
+ [
283
+ "t13d1517h2_8daaf6152771_cb7bf5808d99",
284
+ "t13d1518h2_8daaf6152771_e2d80978ab2e"
285
+ ],
286
+ "52d84b11737d980aef856699f885ca86"
287
+ );
288
+
289
+ test_emulation!(
290
+ test_chrome153,
291
+ Emulation::Chrome153,
292
+ [
293
+ "t13d1517h2_8daaf6152771_cb7bf5808d99",
294
+ "t13d1518h2_8daaf6152771_e2d80978ab2e"
295
+ ],
296
+ "52d84b11737d980aef856699f885ca86"
297
+ );
@@ -90,3 +90,24 @@ test_emulation!(
90
90
  ["t13d1717h2_5b57614c22b0_3cbfd9057e0d"],
91
91
  "6ea73faa8fc5aac76bded7bd238f6433"
92
92
  );
93
+
94
+ test_emulation!(
95
+ test_firefox_150,
96
+ Emulation::Firefox150,
97
+ ["t13d1617h2_86a278354501_3cbfd9057e0d"],
98
+ "6ea73faa8fc5aac76bded7bd238f6433"
99
+ );
100
+
101
+ test_emulation!(
102
+ test_firefox_151,
103
+ Emulation::Firefox151,
104
+ ["t13d1617h2_86a278354501_3cbfd9057e0d"],
105
+ "6ea73faa8fc5aac76bded7bd238f6433"
106
+ );
107
+
108
+ test_emulation!(
109
+ test_firefox_152,
110
+ Emulation::Firefox152,
111
+ ["t13d1617h2_86a278354501_3cbfd9057e0d"],
112
+ "6ea73faa8fc5aac76bded7bd238f6433"
113
+ );
@@ -63,6 +63,8 @@ module Wreq
63
63
  Chrome149 = nil
64
64
  Chrome150 = nil
65
65
  Chrome151 = nil
66
+ Chrome152 = nil
67
+ Chrome153 = nil
66
68
 
67
69
  Edge101 = nil
68
70
  Edge122 = nil
@@ -104,6 +106,7 @@ module Wreq
104
106
  Firefox149 = nil
105
107
  Firefox150 = nil
106
108
  Firefox151 = nil
109
+ Firefox152 = nil
107
110
 
108
111
  SafariIos17_2 = nil
109
112
  SafariIos17_4_1 = nil
data/src/emulate.rs CHANGED
@@ -88,6 +88,8 @@ define_ruby_enum!(
88
88
  Chrome149,
89
89
  Chrome150,
90
90
  Chrome151,
91
+ Chrome152,
92
+ Chrome153,
91
93
 
92
94
  Edge101,
93
95
  Edge122,
@@ -129,6 +131,7 @@ define_ruby_enum!(
129
131
  Firefox149,
130
132
  Firefox150,
131
133
  Firefox151,
134
+ Firefox152,
132
135
 
133
136
  SafariIos17_2,
134
137
  SafariIos17_4_1,
@@ -18,6 +18,17 @@ class EmulationTest < Minitest::Test
18
18
  assert_instance_of Wreq::Emulation, Wreq::Emulation.new(profile: profile)
19
19
  end
20
20
 
21
+ def test_new_browser_profiles_are_available
22
+ {
23
+ Wreq::Profile::Chrome152 => "Chrome152",
24
+ Wreq::Profile::Chrome153 => "Chrome153",
25
+ Wreq::Profile::Firefox152 => "Firefox152"
26
+ }.each do |profile, name|
27
+ assert_equal name, profile.to_s
28
+ assert_instance_of Wreq::Emulation, Wreq::Emulation.new(profile: profile)
29
+ end
30
+ end
31
+
21
32
  def test_all_emulation_os_constants_are_non_nil
22
33
  Wreq::Platform.constants.each do |name|
23
34
  const = Wreq::Platform.const_get(name)
data/wreq.gemspec CHANGED
@@ -56,7 +56,7 @@ Gem::Specification.new do |spec|
56
56
  # Exclude non-Ruby files from RDoc to prevent parsing errors
57
57
  spec.rdoc_options = ["--exclude", "Cargo\\..*", "--exclude", "\\.rs$"]
58
58
 
59
- spec.requirements = ["Rust >= 1.97"]
59
+ spec.requirements = ["Rust >= 1.98"]
60
60
  # use a Ruby version which:
61
61
  # - supports Rubygems with the ability of compilation of Rust gem
62
62
  # - not end of life
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wreq
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.13
4
+ version: 1.2.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - SearchApi
@@ -199,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
199
  - !ruby/object:Gem::Version
200
200
  version: '0'
201
201
  requirements:
202
- - Rust >= 1.97
202
+ - Rust >= 1.98
203
203
  rubygems_version: 3.6.9
204
204
  specification_version: 4
205
205
  summary: Ruby bindings for wreq, an HTTP client with TLS/HTTP2 browser fingerprinting