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 +4 -4
- data/Cargo.lock +19 -17
- data/Cargo.toml +6 -6
- data/README.md +2 -2
- data/crates/wreq-util/CHANGELOG.md +7 -0
- data/crates/wreq-util/Cargo.toml +12 -4
- data/crates/wreq-util/src/emulate/macros.rs +7 -0
- data/crates/wreq-util/src/emulate/profile/chrome/header.rs +28 -0
- data/crates/wreq-util/src/emulate/profile/chrome/tls.rs +33 -3
- data/crates/wreq-util/src/emulate/profile/chrome.rs +67 -0
- data/crates/wreq-util/src/emulate/profile/firefox/tls.rs +20 -0
- data/crates/wreq-util/src/emulate/profile/firefox.rs +31 -2
- data/crates/wreq-util/src/emulate.rs +3 -0
- data/crates/wreq-util/tests/emulate_chrome.rs +20 -0
- data/crates/wreq-util/tests/emulate_firefox.rs +21 -0
- data/lib/wreq_ruby/emulate.rb +3 -0
- data/src/emulate.rs +3 -0
- data/test/emulation_test.rb +11 -0
- data/wreq.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cb297a1d40048f6a29833fe7eb1a8248e1460825be97802d82aece4e922b1b6a
|
|
4
|
+
data.tar.gz: eb8042d063690fa100cc63249f041e17724b5e8113c0611acb8c819d4ecc2afd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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?
|
|
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?
|
|
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.
|
|
1282
|
+
version = "0.7.1"
|
|
1274
1283
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1275
|
-
checksum = "
|
|
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 = "
|
|
1423
|
-
source = "git+https://github.com/0x676e67/wreq?rev=
|
|
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.
|
|
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.
|
|
9
|
-
rust-version = "1.
|
|
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 = "
|
|
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",
|
|
69
|
-
btls-sys = { git = "https://github.com/0x676e67/btls",
|
|
70
|
-
wreq = { git = "https://github.com/0x676e67/wreq", rev = "
|
|
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
|
|
data/crates/wreq-util/Cargo.toml
CHANGED
|
@@ -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.
|
|
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 = [
|
|
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 = "
|
|
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 = "
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
);
|
data/lib/wreq_ruby/emulate.rb
CHANGED
|
@@ -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,
|
data/test/emulation_test.rb
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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
|